Skill

প্র্যাকটিস প্রোজেক্টস

Computer Programming - পাইথন প্রোগ্রামিং (Python Programming)
335

Python শেখার এবং দক্ষতা বাড়ানোর জন্য কিছু মজার ও চ্যালেঞ্জিং প্র্যাকটিস প্রোজেক্ট করতে পারেন। এখানে কয়েকটি প্রজেক্ট আইডিয়া উল্লেখ করা হলো, যা বিভিন্ন লেভেলের প্রোগ্রামারদের জন্য উপযোগী।


১. ক্যালকুলেটর অ্যাপ্লিকেশন

বর্ণনা: একটি সাধারণ ক্যালকুলেটর অ্যাপ্লিকেশন তৈরি করুন যা যোগ, বিয়োগ, গুণ, ভাগের মতো মৌলিক গাণিতিক অপারেশন সম্পন্ন করতে পারে। চাইলে Tkinter বা PyQt ব্যবহার করে একটি GUI যুক্ত করতে পারেন। লেভেল: বিগিনার

২. টুডো লিস্ট ম্যানেজার

বর্ণনা: একটি টুডো লিস্ট ম্যানেজার তৈরি করুন যেখানে ব্যবহারকারীরা টাস্ক অ্যাড, রিমুভ এবং সম্পন্ন হিসেবে মার্ক করতে পারবেন। চাইলে SQLite ডাটাবেস ব্যবহার করে ডেটা সংরক্ষণ করতে পারেন। লেভেল: বিগিনার থেকে ইন্টারমিডিয়েট

৩. ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল

বর্ণনা: একটি টুল তৈরি করুন যা ব্যবহারকারীর ফাইল এনক্রিপ্ট এবং ডিক্রিপ্ট করতে পারে। ফাইলের নিরাপত্তার জন্য cryptography লাইব্রেরি ব্যবহার করতে পারেন। লেভেল: ইন্টারমিডিয়েট

৪. ওয়েব স্ক্র্যাপার

বর্ণনা: BeautifulSoup এবং Requests ব্যবহার করে একটি ওয়েব স্ক্র্যাপার তৈরি করুন যা নির্দিষ্ট ওয়েবসাইট থেকে ডেটা সংগ্রহ করে। যেমন: একটি নিউজ ওয়েবসাইট থেকে সর্বশেষ খবরগুলো স্ক্র্যাপ করে দেখানো। লেভেল: ইন্টারমিডিয়েট

৫. কনভার্টার (মুদ্রা, তাপমাত্রা, ইত্যাদি)

বর্ণনা: একটি কনভার্টার অ্যাপ তৈরি করুন যা মুদ্রা, তাপমাত্রা, দৈর্ঘ্য, ওজন ইত্যাদি কনভার্ট করতে পারে। লেভেল: বিগিনার থেকে ইন্টারমিডিয়েট

৬. রিমাইন্ডার অ্যাপ্লিকেশন

বর্ণনা: একটি রিমাইন্ডার অ্যাপ তৈরি করুন যা নির্দিষ্ট সময়ে ব্যবহারকারীকে একটি নোটিফিকেশন পাঠাবে। এটি datetime এবং time মডিউল ব্যবহার করে তৈরি করা যাবে। লেভেল: ইন্টারমিডিয়েট

৭. কুইজ গেম

বর্ণনা: একটি কুইজ গেম তৈরি করুন যেখানে বিভিন্ন প্রশ্ন থাকবে এবং ব্যবহারকারী সঠিক উত্তর প্রদান করলে তার পয়েন্ট বাড়বে। ফাইল বা ডাটাবেস থেকে প্রশ্ন সংগ্রহ করতে পারেন। লেভেল: বিগিনার

৮. পাসওয়ার্ড জেনারেটর

বর্ণনা: একটি পাসওয়ার্ড জেনারেটর তৈরি করুন যা র্যান্ডম শক্তিশালী পাসওয়ার্ড তৈরি করতে পারে। ব্যবহারকারীর পছন্দমত পাসওয়ার্ডের দৈর্ঘ্য এবং ক্যারেক্টার টাইপ (সংখ্যা, অক্ষর, বিশেষ চিহ্ন) সিলেক্ট করার সুবিধা দিন। লেভেল: বিগিনার

৯. রিয়েল টাইম ওয়েদার অ্যাপ

বর্ণনা: একটি ওয়েদার অ্যাপ তৈরি করুন যা ব্যবহারকারীর লোকেশন অনুযায়ী আবহাওয়া তথ্য প্রদান করবে। requests লাইব্রেরি এবং কোনো আবহাওয়া API (যেমন OpenWeatherMap) ব্যবহার করতে পারেন। লেভেল: ইন্টারমিডিয়েট

১০. ব্যায়াম ট্র্যাকার অ্যাপ

বর্ণনা: একটি অ্যাপ তৈরি করুন যেখানে ব্যবহারকারী দৈনিক ব্যায়াম, সময় এবং ক্যালরি বার্ন ট্র্যাক করতে পারবেন। SQLite বা কোনো ডাটাবেস ব্যবহার করে ডেটা সংরক্ষণ করতে পারেন। লেভেল: ইন্টারমিডিয়েট

১১. ইমেজ প্রসেসিং অ্যাপ

বর্ণনা: OpenCV এবং Pillow লাইব্রেরি ব্যবহার করে একটি ইমেজ প্রসেসিং অ্যাপ তৈরি করুন। এটি ইমেজ রিসাইজ, কালার পরিবর্তন, ফিল্টার যোগ ইত্যাদি কাজ করতে পারে। লেভেল: ইন্টারমিডিয়েট থেকে অ্যাডভান্সড

১২. বুক ম্যানেজমেন্ট সিস্টেম

বর্ণনা: একটি বুক ম্যানেজমেন্ট সিস্টেম তৈরি করুন যেখানে ব্যবহারকারীরা বইয়ের নাম, লেখক, প্রকাশনা তারিখ ইত্যাদি তথ্য রাখতে পারবেন। এই প্রোজেক্টে CRUD অপারেশন এবং ডাটাবেস ব্যবহার করতে পারেন। লেভেল: ইন্টারমিডিয়েট

১৩. পোর্টফোলিও ওয়েবসাইট

বর্ণনা: Flask বা Django ফ্রেমওয়ার্ক ব্যবহার করে একটি পোর্টফোলিও ওয়েবসাইট তৈরি করুন যেখানে আপনার প্রোজেক্ট এবং অভিজ্ঞতা প্রদর্শন করা যাবে। লেভেল: ইন্টারমিডিয়েট থেকে অ্যাডভান্সড

১৪. চ্যাট অ্যাপ্লিকেশন

বর্ণনা: একটি চ্যাট অ্যাপ তৈরি করুন যেখানে রিয়েল টাইমে মেসেজ আদান-প্রদান করা যাবে। চাইলে সিম্পল টেক্সট চ্যাট তৈরি করতে পারেন, যা Tkinter এবং Socket প্রোগ্রামিং ব্যবহার করে করা যাবে। লেভেল: অ্যাডভান্সড

১৫. ব্লগ প্ল্যাটফর্ম

বর্ণনা: Django ফ্রেমওয়ার্ক ব্যবহার করে একটি ব্লগ প্ল্যাটফর্ম তৈরি করুন যেখানে ব্যবহারকারীরা পোস্ট তৈরি, সম্পাদনা, মুছে ফেলা এবং মন্তব্য করতে পারবে। লেভেল: অ্যাডভান্সড

১৬. ইনভেন্টরি ম্যানেজমেন্ট সিস্টেম

বর্ণনা: একটি ইনভেন্টরি ম্যানেজমেন্ট সিস্টেম তৈরি করুন যেখানে পণ্য অ্যাড, রিমুভ, ট্র্যাক করা যাবে। পণ্য স্টক শেষ হলে নোটিফিকেশন পাঠানো যাবে। লেভেল: অ্যাডভান্সড

১৭. পাইথন স্ক্রিপ্টস সংগ্রহ (Automation Scripts)

বর্ণনা: বিভিন্ন ছোট স্ক্রিপ্ট যেমন ফাইল অর্গানাইজার, ইমেইল সেন্ডার, ফোল্ডার ব্যাকআপ ইত্যাদি তৈরি করুন। এটি জটিল নয়, তবে দৈনন্দিন কাজগুলোকে স্বয়ংক্রিয় করতে কার্যকরী। লেভেল: ইন্টারমিডিয়েট

১৮. রেগুলার এক্সপ্রেশন টেস্টার

বর্ণনা: একটি টুল তৈরি করুন যা ব্যবহারকারীদের রেগুলার এক্সপ্রেশন টেস্ট করতে সাহায্য করবে। এর মাধ্যমে ব্যবহারকারীরা বিভিন্ন প্যাটার্ন টেস্ট করতে পারবে। লেভেল: ইন্টারমিডিয়েট

১৯. নিউজ অ্যাপ

বর্ণনা: একটি নিউজ অ্যাপ তৈরি করুন যা নির্দিষ্ট কিছু ক্যাটাগরির সংবাদ প্রদর্শন করবে। এর জন্য requests লাইব্রেরি এবং কোনো নিউজ API (যেমন NewsAPI) ব্যবহার করতে পারেন। লেভেল: ইন্টারমিডিয়েট

২০. পাইথন গেম (টিক-ট্যাক-টো বা স্নেক গেম)

বর্ণনা: Pygame লাইব্রেরি ব্যবহার করে একটি ছোট গেম তৈরি করুন। স্নেক গেম, টিক-ট্যাক-টো গেম বা অন্য কোনো সহজ গেম তৈরি করতে পারেন। লেভেল: বিগিনার থেকে ইন্টারমিডিয়েট


উপসংহার

এই প্রোজেক্টগুলো Python শেখার জন্য চমৎকার। এগুলি বিভিন্ন স্তরের স্কিল ডেভেলপ করতে সাহায্য করবে। প্রাথমিক প্রোজেক্টগুলো দিয়ে প্রোগ্রামিং কনসেপ্ট বুঝতে এবং মাঝারি বা উচ্চ স্তরের প্রোজেক্ট দিয়ে আরও উন্নত প্রোগ্রামিং দক্ষতা অর্জন করা সম্ভব।

Content added By

ক্যালকুলেটর অ্যাপ তৈরি

345

Python-এর Tkinter লাইব্রেরি ব্যবহার করে একটি সাধারণ ক্যালকুলেটর অ্যাপ তৈরি করা যেতে পারে। এই ক্যালকুলেটর অ্যাপটি সাধারণ গাণিতিক অপারেশন যেমন যোগ, বিয়োগ, গুণ, এবং ভাগ করতে সক্ষম হবে। Tkinter হল Python-এর বিল্ট-ইন লাইব্রেরি যা GUI তৈরির জন্য ব্যবহৃত হয়।


প্রজেক্ট: ক্যালকুলেটর অ্যাপ

এই প্রজেক্টে আমরা একটি Tkinter ক্যালকুলেটর তৈরি করব, যেখানে ব্যবহারকারীরা সংখ্যা ইনপুট দিতে পারবেন এবং গাণিতিক অপারেশন সিলেক্ট করতে পারবেন। শেষে তারা = বোতাম চেপে ফলাফল দেখতে পারবেন।

ধাপ ১: Tkinter ইনস্টল এবং সেটআপ

Tkinter Python-এর সাথে বিল্ট-ইন থাকে, তাই আলাদা ইনস্টলেশনের প্রয়োজন নেই।

ধাপ ২: প্রয়োজনীয় ফাংশনালিটি সংজ্ঞায়িত করা

প্রথমে Tkinter GUI তৈরি করতে হবে এবং তারপর ক্যালকুলেটরের জন্য গাণিতিক ফাংশনগুলি যোগ করতে হবে।


কোড:

import tkinter as tk

# মেইন উইন্ডো তৈরি করা
root = tk.Tk()
root.title("Simple Calculator")
root.geometry("400x500")

# ইনপুট ফিল্ড
input_text = tk.StringVar()
entry = tk.Entry(root, textvariable=input_text, font=('Arial', 24), borderwidth=2, relief="solid")
entry.grid(row=0, column=0, columnspan=4, ipadx=8, ipady=10)

# বোতাম ক্লিক ইভেন্ট
def button_click(item):
    current = input_text.get()
    input_text.set(current + str(item))

# ফলাফল প্রদর্শন
def calculate():
    try:
        result = str(eval(input_text.get()))
        input_text.set(result)
    except Exception as e:
        input_text.set("Error")

# ইনপুট ফিল্ড ক্লিয়ার করা
def clear_field():
    input_text.set("")

# বোতাম তৈরি করার জন্য একটি ফাংশন
def create_button(text, row, col, width=5, height=2, command=None):
    return tk.Button(root, text=text, width=width, height=height, font=('Arial', 18), command=command).grid(row=row, column=col, sticky="nsew")

# বোতামগুলো তৈরি
buttons = [
    ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
    ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
    ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
    ('C', 4, 0), ('0', 4, 1), ('=', 4, 2), ('+', 4, 3),
]

for (text, row, col) in buttons:
    if text == '=':
        create_button(text, row, col, command=calculate)
    elif text == 'C':
        create_button(text, row, col, command=clear_field)
    else:
        create_button(text, row, col, command=lambda t=text: button_click(t))

# মেইন লুপ চালানো
root.mainloop()

কোড ব্যাখ্যা:

ইনপুট ফিল্ড তৈরি: Entry উইজেট ব্যবহার করে ইনপুট ফিল্ড তৈরি করা হয়েছে, যেখানে ব্যবহারকারী তাদের ইনপুট দিতে পারবেন।

button_click ফাংশন: প্রতিটি বোতাম ক্লিক করার সাথে সাথে এটি ইনপুট ফিল্ডে ক্লিক করা সংখ্যাটি যোগ করবে।

calculate ফাংশন: = বোতাম চাপলে eval() ফাংশনের মাধ্যমে ইনপুট ফিল্ডে দেয়া এক্সপ্রেশনটি সমাধান করে ফলাফল দেখাবে। যদি কোনো ত্রুটি থাকে তবে Error মেসেজ প্রদর্শিত হবে।

clear_field ফাংশন: C বোতাম ক্লিক করলে এটি ইনপুট ফিল্ড পরিষ্কার করবে।

বোতাম তৈরি: create_button ফাংশন ব্যবহার করে প্রয়োজনীয় বোতামগুলো তৈরি করা হয়েছে। প্রতিটি বোতাম নির্দিষ্ট স্থানে বসানো হয়েছে।


আউটপুট

উপরের কোডটি চালানোর পর একটি GUI উইন্ডো তৈরি হবে যেখানে একটি ইনপুট ফিল্ড থাকবে এবং নিচে বিভিন্ন গাণিতিক অপারেশনের বোতাম থাকবে। ব্যবহারকারী সংখ্যাগুলি ইনপুট দিতে পারবেন এবং গাণিতিক অপারেশন চালিয়ে ফলাফল পেতে পারবেন।


উপসংহার

এই ক্যালকুলেটরটি Tkinter ব্যবহার করে একটি সাধারণ এবং কার্যকরী প্রোজেক্ট হিসেবে কাজ করবে। এটি প্রাথমিক স্তরের Python GUI প্রোগ্রামিংয়ে দক্ষতা বৃদ্ধিতে সহায়ক। এছাড়াও, এই প্রজেক্টে নতুন নতুন ফিচার যেমন বিজ্ঞাপন সাপোর্ট, এক্সট্রা গাণিতিক অপারেশন ইত্যাদি যোগ করতে পারেন।

Content added By

টু-ডু লিস্ট অ্যাপ

410

Python এর Tkinter লাইব্রেরি ব্যবহার করে একটি টু-ডু লিস্ট অ্যাপ তৈরি করা যায়। এই অ্যাপের মাধ্যমে ব্যবহারকারীরা বিভিন্ন টাস্ক যোগ, সম্পন্ন, ও মুছে ফেলতে পারবেন। এখানে Tkinter ব্যবহার করে একটি সাধারণ টু-ডু লিস্ট অ্যাপ তৈরির উদাহরণ দেয়া হলো।


প্রজেক্ট: টু-ডু লিস্ট অ্যাপ

বর্ণনা: এই অ্যাপটিতে ব্যবহারকারী টাস্ক যোগ করতে পারবেন এবং যেকোনো টাস্ক সম্পন্ন হলে সেটি সম্পন্ন হিসেবে মার্ক করতে পারবেন। প্রয়োজনে টাস্কগুলো মুছে ফেলতেও পারবেন।


ধাপ ১: Tkinter ইম্পোর্ট এবং উইন্ডো সেটআপ

import tkinter as tk
from tkinter import messagebox

# মেইন উইন্ডো তৈরি করা
root = tk.Tk()
root.title("To-Do List App")
root.geometry("400x500")

ধাপ ২: টাস্ক যুক্ত করার ফাংশন

# টাস্ক যোগ করা
def add_task():
    task = task_entry.get()
    if task != "":
        task_listbox.insert(tk.END, task)
        task_entry.delete(0, tk.END)
    else:
        messagebox.showwarning("Warning", "You must enter a task.")

ধাপ ৩: টাস্ক মুছে ফেলার ফাংশন

# টাস্ক মুছে ফেলা
def delete_task():
    try:
        selected_task_index = task_listbox.curselection()[0]
        task_listbox.delete(selected_task_index)
    except IndexError:
        messagebox.showwarning("Warning", "You must select a task to delete.")

ধাপ ৪: সকল টাস্ক মুছে ফেলার ফাংশন

python

Copy code

# সকল টাস্ক মুছে ফেলা
def delete_all_tasks():
    task_listbox.delete(0, tk.END)

ধাপ ৫: টাস্ক সম্পন্ন হিসেবে মার্ক করা

# টাস্ক সম্পন্ন হিসেবে মার্ক করা
def mark_task_completed():
    try:
        selected_task_index = task_listbox.curselection()[0]
        task = task_listbox.get(selected_task_index)
        task_listbox.delete(selected_task_index)
        task_listbox.insert(tk.END, task + " ✅")
    except IndexError:
        messagebox.showwarning("Warning", "You must select a task to mark as completed.")

ধাপ ৬: উইজেট এবং বোতাম তৈরি

# এন্ট্রি বক্স তৈরি করা
task_entry = tk.Entry(root, width=30, font=("Arial", 14))
task_entry.pack(pady=10)

# টাস্ক লিস্টবক্স তৈরি করা
task_listbox = tk.Listbox(root, width=30, height=15, font=("Arial", 14), selectmode=tk.SINGLE)
task_listbox.pack(pady=10)

# বোতাম তৈরি এবং যুক্ত করা
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

add_task_button = tk.Button(button_frame, text="Add Task", command=add_task, width=12)
add_task_button.grid(row=0, column=0, padx=5, pady=5)

delete_task_button = tk.Button(button_frame, text="Delete Task", command=delete_task, width=12)
delete_task_button.grid(row=0, column=1, padx=5, pady=5)

delete_all_button = tk.Button(button_frame, text="Delete All Tasks", command=delete_all_tasks, width=12)
delete_all_button.grid(row=1, column=0, padx=5, pady=5)

mark_completed_button = tk.Button(button_frame, text="Mark Completed", command=mark_task_completed, width=12)
mark_completed_button.grid(row=1, column=1, padx=5, pady=5)

ধাপ ৭: মেইন লুপ চালানো

# মেইন লুপ চালানো
root.mainloop()

সম্পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox

# মেইন উইন্ডো তৈরি করা
root = tk.Tk()
root.title("To-Do List App")
root.geometry("400x500")

# টাস্ক যোগ করা
def add_task():
    task = task_entry.get()
    if task != "":
        task_listbox.insert(tk.END, task)
        task_entry.delete(0, tk.END)
    else:
        messagebox.showwarning("Warning", "You must enter a task.")

# টাস্ক মুছে ফেলা
def delete_task():
    try:
        selected_task_index = task_listbox.curselection()[0]
        task_listbox.delete(selected_task_index)
    except IndexError:
        messagebox.showwarning("Warning", "You must select a task to delete.")

# সকল টাস্ক মুছে ফেলা
def delete_all_tasks():
    task_listbox.delete(0, tk.END)

# টাস্ক সম্পন্ন হিসেবে মার্ক করা
def mark_task_completed():
    try:
        selected_task_index = task_listbox.curselection()[0]
        task = task_listbox.get(selected_task_index)
        task_listbox.delete(selected_task_index)
        task_listbox.insert(tk.END, task + " ✅")
    except IndexError:
        messagebox.showwarning("Warning", "You must select a task to mark as completed.")

# এন্ট্রি বক্স তৈরি করা
task_entry = tk.Entry(root, width=30, font=("Arial", 14))
task_entry.pack(pady=10)

# টাস্ক লিস্টবক্স তৈরি করা
task_listbox = tk.Listbox(root, width=30, height=15, font=("Arial", 14), selectmode=tk.SINGLE)
task_listbox.pack(pady=10)

# বোতাম তৈরি এবং যুক্ত করা
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

add_task_button = tk.Button(button_frame, text="Add Task", command=add_task, width=12)
add_task_button.grid(row=0, column=0, padx=5, pady=5)

delete_task_button = tk.Button(button_frame, text="Delete Task", command=delete_task, width=12)
delete_task_button.grid(row=0, column=1, padx=5, pady=5)

delete_all_button = tk.Button(button_frame, text="Delete All Tasks", command=delete_all_tasks, width=12)
delete_all_button.grid(row=1, column=0, padx=5, pady=5)

mark_completed_button = tk.Button(button_frame, text="Mark Completed", command=mark_task_completed, width=12)
mark_completed_button.grid(row=1, column=1, padx=5, pady=5)

# মেইন লুপ চালানো
root.mainloop()

কোড ব্যাখ্যা

add_task ফাংশন: এটি নতুন টাস্ক অ্যাড করে task_entry থেকে টাস্কটি নিয়ে এবং task_listbox এ যোগ করে।

delete_task ফাংশন: task_listbox থেকে সিলেক্ট করা টাস্কটি মুছে ফেলে।

delete_all_tasks ফাংশন: এটি task_listbox থেকে সব টাস্ক মুছে ফেলে।

mark_task_completed ফাংশন: সিলেক্ট করা টাস্কটিকে সম্পন্ন হিসেবে মার্ক করে (টাস্ক শেষে ✅ যোগ করা হয়)।

GUI সেটআপ: Tkinter-এর বিভিন্ন উইজেট ব্যবহার করে এন্ট্রি ফিল্ড, লিস্টবক্স এবং বোতাম তৈরি করা হয়েছে এবং তাদের নির্দিষ্ট স্থানে বসানো হয়েছে।


উপসংহার

এই প্রোজেক্টটি Tkinter ব্যবহার করে একটি সাধারণ টু-ডু লিস্ট অ্যাপ তৈরির মাধ্যমে Python GUI প্রোগ্রামিংয়ের ধারণা স্পষ্ট করে। এই অ্যাপে আরো ফিচার যোগ করা যেতে পারে যেমন ডেটাবেস ব্যবহার করে টাস্ক সংরক্ষণ, টাস্ক রিমাইন্ডার ফাংশন, কিংবা টাইম ট্র্যাকিং।

Content added By

কন্টাক্ট ম্যানেজমেন্ট সিস্টেম

258

Python-এর Tkinter এবং SQLite ব্যবহার করে একটি সহজ কন্টাক্ট ম্যানেজমেন্ট সিস্টেম তৈরি করা যেতে পারে। এই সিস্টেমের মাধ্যমে ব্যবহারকারীরা তাদের কন্টাক্ট লিস্ট পরিচালনা করতে পারবেন, যেমন নতুন কন্টাক্ট যোগ করা, কন্টাক্ট মুছে ফেলা, এবং কন্টাক্ট তথ্য আপডেট করা।


প্রজেক্ট: কন্টাক্ট ম্যানেজমেন্ট সিস্টেম

বর্ণনা: এই অ্যাপটি ব্যবহারকারীদের কন্টাক্ট তথ্য সংরক্ষণ ও পরিচালনা করতে সাহায্য করবে। এখানে একটি SQLite ডাটাবেস ব্যবহৃত হবে যেখানে প্রতিটি কন্টাক্টের তথ্য (নাম, ফোন নাম্বার, এবং ইমেইল) সংরক্ষণ করা হবে।


ধাপ ১: Tkinter এবং SQLite সেটআপ করা

প্রথমে Tkinter এবং SQLite ব্যবহার করে একটি GUI এবং ডাটাবেস তৈরি করতে হবে। Tkinter GUI উইন্ডো তৈরি করবে এবং SQLite ডাটাবেসের সাথে কন্টাক্ট তথ্য সংরক্ষণ করবে।

import tkinter as tk
from tkinter import messagebox
import sqlite3

ধাপ ২: ডাটাবেস তৈরি করা

ডাটাবেস এবং টেবিল তৈরি করতে নিচের কোড ব্যবহার করা যাবে। যখনই অ্যাপটি চালানো হবে, এটি ডাটাবেসে একটি contacts টেবিল তৈরি করবে (যদি না থাকে)।

# ডাটাবেস এবং টেবিল তৈরি করা
conn = sqlite3.connect("contacts.db")
cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS contacts (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        phone TEXT NOT NULL,
        email TEXT
    )
""")
conn.commit()

ধাপ ৩: ফাংশন তৈরি করা

নতুন কন্টাক্ট যোগ করা, কন্টাক্ট মুছে ফেলা, কন্টাক্ট আপডেট করা, এবং সব কন্টাক্ট দেখানো - এইসব ফাংশন তৈরি করা।

১. নতুন কন্টাক্ট যোগ করা

def add_contact():
    name = name_entry.get()
    phone = phone_entry.get()
    email = email_entry.get()
    if name and phone:
        cursor.execute("INSERT INTO contacts (name, phone, email) VALUES (?, ?, ?)", (name, phone, email))
        conn.commit()
        messagebox.showinfo("Success", "Contact added successfully.")
        clear_entries()
        show_contacts()
    else:
        messagebox.showwarning("Warning", "Name and Phone fields are required.")

২. কন্টাক্ট মুছে ফেলা

def delete_contact():
    selected_contact = contact_listbox.curselection()
    if selected_contact:
        contact_id = contact_listbox.get(selected_contact).split()[0]
        cursor.execute("DELETE FROM contacts WHERE id=?", (contact_id,))
        conn.commit()
        messagebox.showinfo("Success", "Contact deleted successfully.")
        show_contacts()
    else:
        messagebox.showwarning("Warning", "Please select a contact to delete.")

৩. কন্টাক্ট আপডেট করা

def update_contact():
    selected_contact = contact_listbox.curselection()
    if selected_contact:
        contact_id = contact_listbox.get(selected_contact).split()[0]
        name = name_entry.get()
        phone = phone_entry.get()
        email = email_entry.get()
        if name and phone:
            cursor.execute("UPDATE contacts SET name=?, phone=?, email=? WHERE id=?", (name, phone, email, contact_id))
            conn.commit()
            messagebox.showinfo("Success", "Contact updated successfully.")
            clear_entries()
            show_contacts()
        else:
            messagebox.showwarning("Warning", "Name and Phone fields are required.")
    else:
        messagebox.showwarning("Warning", "Please select a contact to update.")

৪. সব কন্টাক্ট দেখানো

def show_contacts():
    contact_listbox.delete(0, tk.END)
    cursor.execute("SELECT * FROM contacts")
    for contact in cursor.fetchall():
        contact_listbox.insert(tk.END, f"{contact[0]} {contact[1]} - {contact[2]} - {contact[3]}")

৫. এন্ট্রি ফিল্ড পরিষ্কার করা

def clear_entries():
    name_entry.delete(0, tk.END)
    phone_entry.delete(0, tk.END)
    email_entry.delete(0, tk.END)

ধাপ ৪: GUI ইন্টারফেস তৈরি করা

Tkinter ব্যবহার করে GUI উইজেট তৈরি করুন। এখানে ইনপুট ফিল্ড এবং বিভিন্ন বাটন থাকবে।

root = tk.Tk()
root.title("Contact Management System")
root.geometry("500x500")

# নাম, ফোন, এবং ইমেইল ইনপুট ফিল্ড
tk.Label(root, text="Name:").pack(pady=5)
name_entry = tk.Entry(root, width=40)
name_entry.pack()

tk.Label(root, text="Phone:").pack(pady=5)
phone_entry = tk.Entry(root, width=40)
phone_entry.pack()

tk.Label(root, text="Email:").pack(pady=5)
email_entry = tk.Entry(root, width=40)
email_entry.pack()

# বাটন ফ্রেম তৈরি
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

add_button = tk.Button(button_frame, text="Add Contact", command=add_contact)
add_button.grid(row=0, column=0, padx=5)

delete_button = tk.Button(button_frame, text="Delete Contact", command=delete_contact)
delete_button.grid(row=0, column=1, padx=5)

update_button = tk.Button(button_frame, text="Update Contact", command=update_contact)
update_button.grid(row=0, column=2, padx=5)

# কন্টাক্ট লিস্টবক্স তৈরি
contact_listbox = tk.Listbox(root, width=50, height=15)
contact_listbox.pack(pady=10)

show_contacts()  # কন্টাক্ট লিস্ট দেখানো

root.mainloop()

সম্পূর্ণ কোড

import tkinter as tk
from tkinter import messagebox
import sqlite3

# ডাটাবেস এবং টেবিল তৈরি করা
conn = sqlite3.connect("contacts.db")
cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS contacts (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        phone TEXT NOT NULL,
        email TEXT
    )
""")
conn.commit()

# ফাংশনগুলি
def add_contact():
    name = name_entry.get()
    phone = phone_entry.get()
    email = email_entry.get()
    if name and phone:
        cursor.execute("INSERT INTO contacts (name, phone, email) VALUES (?, ?, ?)", (name, phone, email))
        conn.commit()
        messagebox.showinfo("Success", "Contact added successfully.")
        clear_entries()
        show_contacts()
    else:
        messagebox.showwarning("Warning", "Name and Phone fields are required.")

def delete_contact():
    selected_contact = contact_listbox.curselection()
    if selected_contact:
        contact_id = contact_listbox.get(selected_contact).split()[0]
        cursor.execute("DELETE FROM contacts WHERE id=?", (contact_id,))
        conn.commit()
        messagebox.showinfo("Success", "Contact deleted successfully.")
        show_contacts()
    else:
        messagebox.showwarning("Warning", "Please select a contact to delete.")

def update_contact():
    selected_contact = contact_listbox.curselection()
    if selected_contact:
        contact_id = contact_listbox.get(selected_contact).split()[0]
        name = name_entry.get()
        phone = phone_entry.get()
        email = email_entry.get()
        if name and phone:
            cursor.execute("UPDATE contacts SET name=?, phone=?, email=? WHERE id=?", (name, phone, email, contact_id))
            conn.commit()
            messagebox.showinfo("Success", "Contact updated successfully.")
            clear_entries()
            show_contacts()
        else:
            messagebox.showwarning("Warning", "Name and Phone fields are required.")
    else:
        messagebox.showwarning("Warning", "Please select a contact to update.")

def show_contacts():
    contact_listbox.delete(0, tk.END)
    cursor.execute("SELECT * FROM contacts")
    for contact in cursor.fetchall():
        contact_listbox.insert(tk.END, f"{contact[0]} {contact[1]} - {contact[2]} - {contact[3]}")

def clear_entries():
    name_entry.delete(0, tk.END)
    phone_entry.delete(0, tk.END)
    email_entry.delete(0, tk.END)

# GUI তৈরি
root = tk.Tk()
root.title("Contact Management System")
root.geometry("500x500")

# ইনপুট ফিল্ড
tk.Label(root, text="Name:").pack(pady=5)
name_entry = tk.Entry(root, width=40)
name_entry.pack()

tk.Label(root, text="Phone:").pack(pady=5)
phone_entry = tk.Entry(root, width=40)
phone_entry.pack()

tk.Label(root, text="Email:").pack(pady=5)
email_entry = tk.Entry(root, width=40)
email_entry.pack()

# বাটন ফ্রেম
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

add_button = tk.Button(button_frame, text="Add Contact", command=add_contact)
add_button.grid(row=0, column=0, padx=5)

delete_button = tk.Button(button_frame, text="Delete Contact", command=delete_contact)
delete_button.grid(row=0, column=1, padx=5)

update_button = tk.Button(button_frame, text="Update Contact", command=update_contact)
update_button.grid(row=0, column=2, padx=5)

# কন্টাক্ট লিস্টবক্স
contact_listbox = tk.Listbox(root, width=50, height=15)
contact_listbox.pack(pady=10)

show_contacts()  # কন্টাক্ট লিস্ট দেখানো

root.mainloop()

উপসংহার

এই কন্টাক্ট ম্যানেজমেন্ট সিস্টেমটি একটি মৌলিক ডেটাবেস-ভিত্তিক অ্যাপ্লিকেশন, যা Tkinter এবং SQLite ব্যবহার করে তৈরি করা হয়েছে। এর মাধ্যমে কন্টাক্ট পরিচালনা করার সব মৌলিক ফিচার যেমন অ্যাড, ডিলিট, আপডেট এবং দেখানো যায়। অ্যাপ্লিকেশনটিকে আরও উন্নত করতে চাইলে সার্চ ফিচার, কন্টাক্ট সেগ্রেগেশন, এবং অ্যাডভান্সড ফিল্টারিং যোগ করতে পারেন।

Content added By

ওয়েব স্ক্র্যাপিং প্রোজেক্ট

296

ওয়েব স্ক্র্যাপিং প্রোজেক্ট হল একটি প্রকল্প যেখানে Python এর লাইব্রেরি যেমন BeautifulSoup, Requests, এবং কখনো Selenium ব্যবহার করে কোনো ওয়েবসাইট থেকে ডেটা সংগ্রহ করা হয়। নিচে একটি উদাহরণসহ কয়েকটি সাধারণ ওয়েব স্ক্র্যাপিং প্রোজেক্টের আইডিয়া তুলে ধরা হলো।


১. প্রজেক্ট: নিউজ হেডলাইন স্ক্র্যাপার

বর্ণনা: এই প্রোজেক্টে জনপ্রিয় কোনো নিউজ ওয়েবসাইট (যেমন https://www.bbc.com/) থেকে সাম্প্রতিক সংবাদ শিরোনাম এবং সংশ্লিষ্ট লিংক স্ক্র্যাপ করা হবে। BeautifulSoup এবং Requests ব্যবহার করে ওয়েব পেজ থেকে এই তথ্যগুলো সংগ্রহ করা হবে।

ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা

python

Copy code

import requests
from bs4 import BeautifulSoup

ধাপ ২: ওয়েবসাইট থেকে HTML ডেটা সংগ্রহ করা

# ওয়েবসাইটের URL
url = 'https://www.bbc.com/'

# Requests দিয়ে HTML পেজ লোড করা
response = requests.get(url)

# যদি পেজ সফলভাবে লোড হয় (status code 200)
if response.status_code == 200:
    html_content = response.content

ধাপ ৩: BeautifulSoup দিয়ে HTML পার্সিং করা

# BeautifulSoup দিয়ে HTML ডেটা পার্স করা
soup = BeautifulSoup(html_content, 'html.parser')

ধাপ ৪: হেডলাইন এবং লিংক এক্সট্রাক্ট করা

ধরুন, শিরোনামগুলো h3 ট্যাগে এবং প্রতিটি শিরোনামের লিংক a ট্যাগের মধ্যে রয়েছে। নিচের কোডে আমরা এগুলো এক্সট্রাক্ট করব।

# শিরোনাম এবং লিংক এক্সট্রাক্ট করা
headlines = []

for item in soup.find_all('h3'):
    headline_text = item.get_text(strip=True)
    headline_link = item.find('a')['href'] if item.find('a') else None
    if headline_text and headline_link:
        full_link = f"https://www.bbc.com{headline_link}" if headline_link.startswith("/") else headline_link
        headlines.append({"headline": headline_text, "link": full_link})

# শিরোনাম এবং লিংক প্রিন্ট করা
for index, headline in enumerate(headlines, 1):
    print(f"{index}. {headline['headline']}\nLink: {headline['link']}\n")

পূর্ণ কোড একসাথে

import requests
from bs4 import BeautifulSoup

url = 'https://www.bbc.com/'

# ওয়েব পেজ থেকে HTML সংগ্রহ
response = requests.get(url)
if response.status_code == 200:
    html_content = response.content

    # BeautifulSoup দিয়ে HTML পার্স
    soup = BeautifulSoup(html_content, 'html.parser')
    headlines = []

    # হেডলাইন এবং লিংক এক্সট্রাক্ট
    for item in soup.find_all('h3'):
        headline_text = item.get_text(strip=True)
        headline_link = item.find('a')['href'] if item.find('a') else None
        if headline_text and headline_link:
            full_link = f"https://www.bbc.com{headline_link}" if headline_link.startswith("/") else headline_link
            headlines.append({"headline": headline_text, "link": full_link})

    # প্রিন্ট করা
    for index, headline in enumerate(headlines, 1):
        print(f"{index}. {headline['headline']}\nLink: {headline['link']}\n")

অন্যান্য প্রজেক্ট আইডিয়া

২. ই-কমার্স ওয়েবসাইট থেকে প্রোডাক্ট ডেটা স্ক্র্যাপিং

বর্ণনা: ই-কমার্স সাইট (যেমন, Amazon বা Flipkart) থেকে নির্দিষ্ট প্রোডাক্টের নাম, দাম, রেটিং এবং স্টক স্ট্যাটাস স্ক্র্যাপ করা।

  • লাইব্রেরি: Requests, BeautifulSoup
  • উদ্দেশ্য: প্রোডাক্টের তুলনামূলক বিশ্লেষণ করা এবং মূল্য পরিবর্তন পর্যবেক্ষণ করা।

৩. আবহাওয়া তথ্য স্ক্র্যাপার

বর্ণনা: কোনো নির্দিষ্ট শহরের আবহাওয়া তথ্য যেমন তাপমাত্রা, বাতাসের গতি এবং আর্দ্রতা স্ক্র্যাপ করা।

  • ওয়েবসাইট: https://www.weather.com/
  • লাইব্রেরি: Requests, BeautifulSoup
  • উদ্দেশ্য: দৈনিক আবহাওয়ার তথ্য সংগ্রহ করে রিপোর্ট তৈরি করা।

৪. জব পোর্টাল স্ক্র্যাপার

বর্ণনা: LinkedIn বা Indeed এর মতো জব পোর্টাল থেকে নির্দিষ্ট চাকরি সম্পর্কিত তথ্য যেমন জব টাইটেল, কোম্পানি নাম, অবস্থান এবং বেতন স্ক্র্যাপ করা।

  • লাইব্রেরি: Selenium (কারণ এই ওয়েবসাইটগুলোতে সাধারণত JavaScript ব্যবহৃত হয়)
  • উদ্দেশ্য: চাকরির বাজার সম্পর্কে ধারণা পাওয়া এবং নির্দিষ্ট পজিশনের জন্য বিভিন্ন তথ্য সংগ্রহ।

৫. ক্রিপ্টোকারেন্সি মূল্য ট্র্যাকার

বর্ণনা: ক্রিপ্টোকারেন্সি ওয়েবসাইট (যেমন CoinMarketCap) থেকে বিভিন্ন ক্রিপ্টোকারেন্সির মূল্য, পরিবর্তন এবং মার্কেট ক্যাপ স্ক্র্যাপ করা।

  • লাইব্রেরি: Requests, BeautifulSoup
  • উদ্দেশ্য: ক্রিপ্টোকারেন্সির মার্কেট এনালাইসিস এবং রিয়েল-টাইম প্রাইস ট্র্যাকিং।

৬. স্টক মার্কেট স্ক্র্যাপার

বর্ণনা: Yahoo Finance বা Google Finance থেকে বিভিন্ন কোম্পানির স্টক প্রাইস, পরিবর্তন, এবং ৫২ সপ্তাহের সর্বোচ্চ ও সর্বনিম্ন মূল্য স্ক্র্যাপ করা।

  • লাইব্রেরি: Requests, BeautifulSoup, অথবা yfinance API
  • উদ্দেশ্য: বিনিয়োগকারীদের জন্য স্টক বাজারের অবস্থা বিশ্লেষণ করা।

৭. বইয়ের রেটিং এবং রিভিউ স্ক্র্যাপার

বর্ণনা: Goodreads থেকে বইয়ের নাম, লেখক, রেটিং এবং রিভিউ স্ক্র্যাপ করা।

  • লাইব্রেরি: Requests, BeautifulSoup
  • উদ্দেশ্য: বিভিন্ন বই সম্পর্কে ধারণা নেওয়া এবং পাঠকদের পরামর্শ দেওয়া।

৮. পিডিএফ জেনারেটর দিয়ে নিউজলেটার তৈরি

বর্ণনা: নির্দিষ্ট ওয়েবসাইট থেকে জনপ্রিয় আর্টিকেল স্ক্র্যাপ করে সেগুলোকে PDF আকারে নিউজলেটারে পরিণত করা।

  • লাইব্রেরি: Requests, BeautifulSoup, ReportLab
  • উদ্দেশ্য: সাপ্তাহিক বা মাসিক একটি নিউজলেটার তৈরি করা।

৯. ইন্সটাগ্রাম প্রোফাইল ডেটা স্ক্র্যাপার

বর্ণনা: একটি নির্দিষ্ট ইন্সটাগ্রাম প্রোফাইল থেকে ফলোয়ার সংখ্যা, পোস্ট সংখ্যা এবং প্রোফাইল বিবরণ স্ক্র্যাপ করা। (ইন্সটাগ্রামের প্রাইভেসি পলিসি মেনে চলতে হবে)

  • লাইব্রেরি: Selenium
  • উদ্দেশ্য: সোশ্যাল মিডিয়া প্রোফাইল বিশ্লেষণ।

১০. ট্রেন বা বাসের সময়সূচি স্ক্র্যাপার

বর্ণনা: কোনো ট্রেন বা বাস ওয়েবসাইট থেকে নির্দিষ্ট গন্তব্যে পৌঁছানোর জন্য ট্রেন/বাসের সময়সূচি স্ক্র্যাপ করা।

  • লাইব্রেরি: Requests, BeautifulSoup
  • উদ্দেশ্য: যাত্রীদের জন্য ট্রেন বা বাসের সময়সূচি বিশ্লেষণ।

উপসংহার

ওয়েব স্ক্র্যাপিং প্রোজেক্টগুলো ডেটা সংগ্রহের জন্য একটি কার্যকরী পদ্ধতি এবং Python-এ BeautifulSoup, Requests, এবং Selenium এর মতো টুলের মাধ্যমে সহজে করা যায়। তবে প্রোজেক্ট করার সময় ওয়েবসাইটের টার্মস অফ সার্ভিস এবং প্রাইভেসি পলিসি মেনে চলা গুরুত্বপূর্ণ।

Content added By

ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল

269

ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল তৈরি করা হলে একটি নির্দিষ্ট ফাইলকে সুরক্ষিত করতে এনক্রিপশন এবং ডিক্রিপশনের সুবিধা পাওয়া যায়। Python-এর cryptography লাইব্রেরি ব্যবহার করে সহজে একটি ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল তৈরি করা যেতে পারে।

এই প্রোজেক্টে, আমরা একটি নির্দিষ্ট কী ব্যবহার করে একটি ফাইল এনক্রিপ্ট করব এবং তারপর সেই একই কী ব্যবহার করে ফাইলটি ডিক্রিপ্ট করব।


Step 1: cryptography লাইব্রেরি ইনস্টল করা

প্রথমে cryptography লাইব্রেরি ইনস্টল করতে হবে। এটি ইনস্টল করতে টার্মিনালে নিচের কমান্ডটি ব্যবহার করুন:

pip install cryptography

Step 2: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা

 

from cryptography.fernet import Fernet

Step 3: এনক্রিপশন এবং ডিক্রিপশন ফাংশন তৈরি করা

১. কী জেনারেটর ফাংশন

এনক্রিপশন এবং ডিক্রিপশনের জন্য একটি সিক্রেট কী প্রয়োজন। এটি তৈরি করার জন্য একটি ফাংশন লিখতে হবে যা একটি সিক্রেট কী জেনারেট করবে এবং ফাইল আকারে সংরক্ষণ করবে।

def generate_key():
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)

২. কী লোড ফাংশন

এই ফাংশনটি secret.key ফাইল থেকে কী লোড করবে।

def load_key():
    return open("secret.key", "rb").read()

৩. ফাইল এনক্রিপশন ফাংশন

এই ফাংশনটি ফাইল এনক্রিপ্ট করবে। এতে load_key() ফাংশন থেকে কী নিয়ে ফাইলটিকে এনক্রিপ্ট করা হবে।

def encrypt_file(file_name):
    key = load_key()
    fernet = Fernet(key)
    
    with open(file_name, "rb") as file:
        file_data = file.read()
    
    encrypted_data = fernet.encrypt(file_data)
    
    with open(file_name, "wb") as file:
        file.write(encrypted_data)
    
    print(f"{file_name} has been encrypted.")

৪. ফাইল ডিক্রিপশন ফাংশন

এই ফাংশনটি ফাইল ডিক্রিপ্ট করবে। এনক্রিপ্টেড ফাইলের ওপর কী ব্যবহার করে ডিক্রিপ্ট করা হবে।

def decrypt_file(file_name):
    key = load_key()
    fernet = Fernet(key)
    
    with open(file_name, "rb") as file:
        encrypted_data = file.read()
    
    decrypted_data = fernet.decrypt(encrypted_data)
    
    with open(file_name, "wb") as file:
        file.write(decrypted_data)
    
    print(f"{file_name} has been decrypted.")

Step 4: পূর্ণ কোড একসাথে

from cryptography.fernet import Fernet

# কী জেনারেট করা এবং সংরক্ষণ করা
def generate_key():
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)

# কী লোড করা
def load_key():
    return open("secret.key", "rb").read()

# ফাইল এনক্রিপ্ট করা
def encrypt_file(file_name):
    key = load_key()
    fernet = Fernet(key)
    
    with open(file_name, "rb") as file:
        file_data = file.read()
    
    encrypted_data = fernet.encrypt(file_data)
    
    with open(file_name, "wb") as file:
        file.write(encrypted_data)
    
    print(f"{file_name} has been encrypted.")

# ফাইল ডিক্রিপ্ট করা
def decrypt_file(file_name):
    key = load_key()
    fernet = Fernet(key)
    
    with open(file_name, "rb") as file:
        encrypted_data = file.read()
    
    decrypted_data = fernet.decrypt(encrypted_data)
    
    with open(file_name, "wb") as file:
        file.write(decrypted_data)
    
    print(f"{file_name} has been decrypted.")

# প্রোগ্রাম চলানোর জন্য নির্দেশাবলী
if __name__ == "__main__":
    generate_key()  # একবার রান করার পরে secret.key ফাইল তৈরি হবে

    # ফাইলের নাম ইনপুট নেয়া
    file_name = input("Enter the file name with extension (e.g., sample.txt): ")

    # অপশন নির্বাচন
    action = input("Enter 'encrypt' to encrypt or 'decrypt' to decrypt the file: ").strip().lower()

    if action == "encrypt":
        encrypt_file(file_name)
    elif action == "decrypt":
        decrypt_file(file_name)
    else:
        print("Invalid option. Please enter either 'encrypt' or 'decrypt'.")

Step 5: প্রোগ্রাম রান করা

প্রোগ্রামটি রান করার জন্য টার্মিনালে নিচের মতো কমান্ড চালান:

python file_encryption_tool.py

প্রথমে, এটি একটি secret.key ফাইল তৈরি করবে, যা এনক্রিপশন এবং ডিক্রিপশনের জন্য প্রয়োজন হবে। এরপর প্রোগ্রামটি ফাইলের নাম এবং অপশন ইনপুট হিসেবে নেবে।

ব্যবহার নির্দেশিকা

Encrypt:

  • ফাইল এনক্রিপ্ট করতে encrypt লিখুন।
  • ইনপুট দেয়া ফাইলটি এনক্রিপ্ট হয়ে যাবে, এবং ফাইলের কন্টেন্ট এনক্রিপটেড হয়ে ফাইলেই লেখা থাকবে।

Decrypt:

  • ফাইল ডিক্রিপ্ট করতে decrypt লিখুন।
  • ইনপুট দেয়া ফাইলটি ডিক্রিপ্ট হয়ে তার মূল কন্টেন্ট ফিরে আসবে।

উদাহরণ

একটি sample.txt ফাইল এনক্রিপ্ট করতে নিচের ধাপগুলো অনুসরণ করুন:

  • প্রথমে ফাইলের নাম লিখুন: sample.txt
  • এরপর অপশন হিসেবে encrypt লিখুন।
  • ফাইল এনক্রিপ্ট হয়ে যাবে এবং কন্টেন্ট এনক্রিপটেড থাকবে।

একই sample.txt ফাইল ডিক্রিপ্ট করতে:

  • ফাইলের নাম লিখুন: sample.txt
  • এরপর অপশন হিসেবে decrypt লিখুন।
  • ফাইল ডিক্রিপ্ট হয়ে আসল কন্টেন্ট ফিরে আসবে।

উপসংহার

এই ফাইল এনক্রিপশন এবং ডিক্রিপশন টুলটি ডেটা সুরক্ষার জন্য গুরুত্বপূর্ণ, এবং Sensitive Data এনক্রিপ্ট করে এটি নিরাপদভাবে সংরক্ষণ করা সম্ভব। এই টুলটি ব্যবহার করে টেক্সট ফাইল, ডকুমেন্ট, ইমেজ এবং অন্যান্য ফাইল এনক্রিপ্ট এবং ডিক্রিপ্ট করা যায়, তবে প্রোগ্রাম ব্যবহার করার সময় সিক্রেট কীটি সংরক্ষণে বিশেষভাবে সতর্ক থাকতে হবে।

Content added By

কনভার্টার (মুদ্রা, তাপমাত্রা, ইত্যাদি)

263

কনভার্টার অ্যাপ্লিকেশন হলো একটি প্রোজেক্ট যেখানে বিভিন্ন ইউনিটের মধ্যে কনভার্শন করা যায়। উদাহরণস্বরূপ, মুদ্রা কনভার্টার, তাপমাত্রা কনভার্টার, দৈর্ঘ্য কনভার্টার ইত্যাদি। এই প্রজেক্টে আমরা Tkinter ব্যবহার করে GUI সহ একটি কনভার্টার অ্যাপ তৈরি করব, যেখানে মুদ্রা এবং তাপমাত্রা কনভার্শনের ফিচার থাকবে। মুদ্রা কনভার্শনের জন্য আমরা API ব্যবহার করব যাতে রিয়েল-টাইম এক্সচেঞ্জ রেট পাওয়া যায়।


প্রজেক্ট: কনভার্টার অ্যাপ্লিকেশন (মুদ্রা এবং তাপমাত্রা)

ফিচারস

  1. মুদ্রা কনভার্টার: নির্দিষ্ট মুদ্রার এক্সচেঞ্জ রেট ব্যবহার করে একটি মুদ্রা থেকে অন্য মুদ্রায় কনভার্ট করা।
  2. তাপমাত্রা কনভার্টার: সেলসিয়াস থেকে ফারেনহাইট এবং ফারেনহাইট থেকে সেলসিয়াস কনভার্ট করা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • requests: মুদ্রা এক্সচেঞ্জ রেট API কল করতে।

প্রথমে টার্মিনালে requests লাইব্রেরি ইন্সটল করতে হবে:

pip install requests

Step 1: Tkinter GUI সেটআপ করা

import tkinter as tk
from tkinter import ttk, messagebox
import requests

Step 2: মুদ্রা কনভার্টারের ফাংশন

মুদ্রা কনভার্টার ফাংশনের জন্য আমরা ExchangeRate API ব্যবহার করব। (আপনার এক্সচেঞ্জ রেট API থেকে একটি API কী সংগ্রহ করতে হবে)

# মুদ্রা কনভার্ট করার জন্য API কল ফাংশন
def convert_currency():
    amount = float(amount_entry.get())
    from_currency = from_currency_var.get()
    to_currency = to_currency_var.get()
    api_key = "YOUR_API_KEY"  # এখানে আপনার API কী লিখুন

    url = f"https://v6.exchangerate-api.com/v6/{api_key}/pair/{from_currency}/{to_currency}"
    response = requests.get(url)
    
    if response.status_code == 200:
        data = response.json()
        rate = data["conversion_rate"]
        converted_amount = amount * rate
        result_label.config(text=f"{amount} {from_currency} = {converted_amount:.2f} {to_currency}")
    else:
        messagebox.showerror("Error", "Failed to fetch exchange rate.")

Step 3: তাপমাত্রা কনভার্টারের ফাংশন

# তাপমাত্রা কনভার্টার ফাংশন
def convert_temperature():
    temp = float(temp_entry.get())
    from_unit = temp_from_var.get()
    to_unit = temp_to_var.get()
    
    if from_unit == "Celsius" and to_unit == "Fahrenheit":
        converted_temp = (temp * 9/5) + 32
    elif from_unit == "Fahrenheit" and to_unit == "Celsius":
        converted_temp = (temp - 32) * 5/9
    else:
        converted_temp = temp
    
    temp_result_label.config(text=f"{temp} {from_unit} = {converted_temp:.2f} {to_unit}")

Step 4: Tkinter GUI ইন্টারফেস তৈরি করা

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Converter App")
root.geometry("400x400")

# মুদ্রা কনভার্টার GUI
currency_frame = tk.LabelFrame(root, text="Currency Converter")
currency_frame.pack(pady=20)

amount_label = tk.Label(currency_frame, text="Amount:")
amount_label.grid(row=0, column=0, padx=5, pady=5)
amount_entry = tk.Entry(currency_frame)
amount_entry.grid(row=0, column=1, padx=5, pady=5)

from_currency_var = tk.StringVar(value="USD")
to_currency_var = tk.StringVar(value="EUR")

from_currency_label = tk.Label(currency_frame, text="From:")
from_currency_label.grid(row=1, column=0, padx=5, pady=5)
from_currency_menu = ttk.Combobox(currency_frame, textvariable=from_currency_var, values=["USD", "EUR", "GBP", "INR", "BDT"])
from_currency_menu.grid(row=1, column=1, padx=5, pady=5)

to_currency_label = tk.Label(currency_frame, text="To:")
to_currency_label.grid(row=2, column=0, padx=5, pady=5)
to_currency_menu = ttk.Combobox(currency_frame, textvariable=to_currency_var, values=["USD", "EUR", "GBP", "INR", "BDT"])
to_currency_menu.grid(row=2, column=1, padx=5, pady=5)

convert_currency_button = tk.Button(currency_frame, text="Convert", command=convert_currency)
convert_currency_button.grid(row=3, column=0, columnspan=2, pady=10)
result_label = tk.Label(currency_frame, text="")
result_label.grid(row=4, column=0, columnspan=2)

# তাপমাত্রা কনভার্টার GUI
temperature_frame = tk.LabelFrame(root, text="Temperature Converter")
temperature_frame.pack(pady=20)

temp_label = tk.Label(temperature_frame, text="Temperature:")
temp_label.grid(row=0, column=0, padx=5, pady=5)
temp_entry = tk.Entry(temperature_frame)
temp_entry.grid(row=0, column=1, padx=5, pady=5)

temp_from_var = tk.StringVar(value="Celsius")
temp_to_var = tk.StringVar(value="Fahrenheit")

from_temp_label = tk.Label(temperature_frame, text="From:")
from_temp_label.grid(row=1, column=0, padx=5, pady=5)
from_temp_menu = ttk.Combobox(temperature_frame, textvariable=temp_from_var, values=["Celsius", "Fahrenheit"])
from_temp_menu.grid(row=1, column=1, padx=5, pady=5)

to_temp_label = tk.Label(temperature_frame, text="To:")
to_temp_label.grid(row=2, column=0, padx=5, pady=5)
to_temp_menu = ttk.Combobox(temperature_frame, textvariable=temp_to_var, values=["Celsius", "Fahrenheit"])
to_temp_menu.grid(row=2, column=1, padx=5, pady=5)

convert_temp_button = tk.Button(temperature_frame, text="Convert", command=convert_temperature)
convert_temp_button.grid(row=3, column=0, columnspan=2, pady=10)
temp_result_label = tk.Label(temperature_frame, text="")
temp_result_label.grid(row=4, column=0, columnspan=2)

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import ttk, messagebox
import requests

# মুদ্রা কনভার্ট করার জন্য API কল ফাংশন
def convert_currency():
    amount = float(amount_entry.get())
    from_currency = from_currency_var.get()
    to_currency = to_currency_var.get()
    api_key = "YOUR_API_KEY"  # এখানে আপনার API কী লিখুন

    url = f"https://v6.exchangerate-api.com/v6/{api_key}/pair/{from_currency}/{to_currency}"
    response = requests.get(url)
    
    if response.status_code == 200:
        data = response.json()
        rate = data["conversion_rate"]
        converted_amount = amount * rate
        result_label.config(text=f"{amount} {from_currency} = {converted_amount:.2f} {to_currency}")
    else:
        messagebox.showerror("Error", "Failed to fetch exchange rate.")

# তাপমাত্রা কনভার্টার ফাংশন
def convert_temperature():
    temp = float(temp_entry.get())
    from_unit = temp_from_var.get()
    to_unit = temp_to_var.get()
    
    if from_unit == "Celsius" and to_unit == "Fahrenheit":
        converted_temp = (temp * 9/5) + 32
    elif from_unit == "Fahrenheit" and to_unit == "Celsius":
        converted_temp = (temp - 32) * 5/9
    else:
        converted_temp = temp
    
    temp_result_label.config(text=f"{temp} {from_unit} = {converted_temp:.2f} {to_unit}")

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Converter App")
root.geometry("400x400")

# মুদ্রা কনভার্টার GUI
currency_frame = tk.LabelFrame(root, text="Currency Converter")
currency_frame.pack(pady=20)

amount_label = tk.Label(currency_frame, text="Amount:")
amount_label.grid(row=0, column=0, padx=5, pady=5)
amount_entry = tk.Entry(currency_frame)
amount_entry.grid(row=0, column=1, padx=5, pady=5)

from_currency_var = tk.StringVar(value="USD")
to_currency_var = tk.StringVar(value="EUR")

from_currency_label = tk.Label(currency_frame, text="From:")
from_currency_label.grid(row=1, column=0, padx=5, pady=5)
from_currency_menu = ttk.Combobox(currency_frame, textvariable=from_currency_var, values=["USD", "EUR", "GBP", "INR", "BDT"])
from_currency_menu.grid(row=1, column=1, padx=5, pady=5)

to_currency_label = tk.Label(currency_frame, text="To:")
to_currency_label.grid(row=2, column=0, padx=5, pady=5)
to_currency_menu = ttk.Combobox(currency_frame, textvariable=to_currency_var, values=["USD", "EUR", "GBP", "INR", "BDT"])
to_currency_menu.grid(row=2, column=1, padx=5, pady=5)

convert_currency_button = tk.Button(currency_frame, text="Convert", command=convert_currency)
convert_currency_button.grid(row=3, column=0, columnspan=2, pady=10)
result_label = tk.Label(currency_frame, text="")
result_label.grid(row=4, column=0, columnspan=2)

# তাপমাত্রা কনভার্টার GUI
temperature_frame = tk.LabelFrame(root, text="Temperature Converter")
temperature_frame.pack(pady=20)

temp_label = tk.Label(temperature_frame, text="Temperature:")
temp_label.grid(row=0, column=0, padx=5, pady=5)
temp_entry = tk.Entry(temperature_frame)
temp_entry.grid(row=0, column=1, padx=5, pady=5)

temp_from_var = tk.StringVar(value="Celsius")
temp_to_var = tk.StringVar(value="Fahrenheit")

from_temp_label = tk.Label(temperature_frame, text="From:")
from_temp_label.grid(row=1, column=0, padx=5, pady=5)
from_temp_menu = ttk.Combobox(temperature_frame, textvariable=temp_from_var, values=["Celsius", "Fahrenheit"])
from_temp_menu.grid(row=1, column=1, padx=5, pady=5)

to_temp_label = tk.Label(temperature_frame, text="To:")
to_temp_label.grid(row=2, column=0, padx=5, pady=5)
to_temp_menu = ttk.Combobox(temperature_frame, textvariable=temp_to_var, values=["Celsius", "Fahrenheit"])
to_temp_menu.grid(row=2, column=1, padx=5, pady=5)

convert_temp_button = tk.Button(temperature_frame, text="Convert", command=convert_temperature)
convert_temp_button.grid(row=3, column=0, columnspan=2, pady=10)
temp_result_label = tk.Label(temperature_frame, text="")
temp_result_label.grid(row=4, column=0, columnspan=2)

root.mainloop()

উপসংহার

এই কনভার্টার অ্যাপটি আপনাকে বিভিন্ন মুদ্রা এবং তাপমাত্রা কনভার্ট করতে সাহায্য করবে। এটি সহজে Tkinter দিয়ে GUI তৈরি করে requests লাইব্রেরি দিয়ে রিয়েল-টাইম মুদ্রার এক্সচেঞ্জ রেট API থেকে ডেটা এনে কাজ করবে।

Content added By

রিমাইন্ডার অ্যাপ্লিকেশন

249

রিমাইন্ডার অ্যাপ্লিকেশন হলো একটি ছোট টুল, যা ব্যবহারকারীদের নির্দিষ্ট সময়ে কোন কাজ বা ইভেন্টের কথা মনে করিয়ে দেয়। আমরা Python-এর Tkinter এবং datetime লাইব্রেরি ব্যবহার করে একটি রিমাইন্ডার অ্যাপ তৈরি করব, যেখানে ব্যবহারকারী একটি টাস্ক সেট করতে পারবে এবং নির্দিষ্ট সময়ে একটি নোটিফিকেশন দেখানো হবে।


প্রজেক্ট: রিমাইন্ডার অ্যাপ

ফিচারস:

  1. টাস্কের নাম এবং সময় ইনপুট দেয়ার ব্যবস্থা।
  2. নির্দিষ্ট সময়ে টাস্কের জন্য নোটিফিকেশন বা পপ-আপ দেখানো।
  3. একাধিক রিমাইন্ডার যোগ করার সুবিধা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • datetime: সময় পরিচালনা করতে।
  • threading: টাইমার ফাংশনটি ব্যাকগ্রাউন্ডে চালাতে।

Step 1: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
from datetime import datetime, timedelta
import threading
import time

Step 2: GUI সেটআপ এবং এন্ট্রি ফিল্ড তৈরি

Tkinter দিয়ে GUI তৈরি করে ব্যবহারকারীকে টাস্কের নাম এবং সময় ইনপুট দেয়ার জন্য ফিল্ড তৈরি করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Reminder App")
root.geometry("400x300")

# টাস্কের নামের এন্ট্রি ফিল্ড
tk.Label(root, text="Task Name:").pack(pady=5)
task_entry = tk.Entry(root, width=30, font=("Arial", 14))
task_entry.pack(pady=5)

# সময় ইনপুটের জন্য এন্ট্রি ফিল্ড (HH:MM ফরম্যাট)
tk.Label(root, text="Reminder Time (HH:MM):").pack(pady=5)
time_entry = tk.Entry(root, width=30, font=("Arial", 14))
time_entry.pack(pady=5)

Step 3: রিমাইন্ডার সেট করার ফাংশন

এই ফাংশনটি ব্যবহারকারীর ইনপুট থেকে টাস্ক এবং সময় নেবে এবং একটি থ্রেডে রান করবে, যাতে এটি নির্দিষ্ট সময়ে নোটিফিকেশন দেখায়।

python

Copy code

def set_reminder():
    task = task_entry.get()
    reminder_time = time_entry.get()
    
    if not task or not reminder_time:
        messagebox.showwarning("Warning", "Please enter both task and time!")
        return
    
    try:
        # সময় ফরম্যাট চেক করা
        reminder_datetime = datetime.strptime(reminder_time, "%H:%M").time()
        now = datetime.now()
        reminder_datetime = datetime.combine(now.date(), reminder_datetime)
        
        if reminder_datetime < now:
            reminder_datetime += timedelta(days=1)  # যদি সময় পার হয়ে যায়, তাহলে পরবর্তী দিনের জন্য সেট করা

        time_diff = (reminder_datetime - now).total_seconds()
        
        # ব্যাকগ্রাউন্ড থ্রেডে টাইমার শুরু করা
        threading.Thread(target=start_timer, args=(time_diff, task)).start()
        messagebox.showinfo("Success", f"Reminder set for {task} at {reminder_datetime.strftime('%H:%M')}")
    except ValueError:
        messagebox.showerror("Error", "Please enter time in HH:MM format!")

Step 4: টাইমার ফাংশন তৈরি করা

এই ফাংশনটি নির্দিষ্ট সময়ের জন্য অপেক্ষা করবে এবং সময় শেষ হলে নোটিফিকেশন দেখাবে।

def start_timer(seconds, task):
    time.sleep(seconds)
    messagebox.showinfo("Reminder", f"It's time for: {task}")

Step 5: GUI-তে বাটন যুক্ত করা

Tkinter GUI-তে একটি Set Reminder বাটন যুক্ত করা হবে, যা set_reminder() ফাংশন কল করবে।

# রিমাইন্ডার সেট করার বাটন
set_reminder_button = tk.Button(root, text="Set Reminder", command=set_reminder, font=("Arial", 12))
set_reminder_button.pack(pady=20)

Step 6: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
from datetime import datetime, timedelta
import threading
import time

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Reminder App")
root.geometry("400x300")

# টাস্কের নামের এন্ট্রি ফিল্ড
tk.Label(root, text="Task Name:").pack(pady=5)
task_entry = tk.Entry(root, width=30, font=("Arial", 14))
task_entry.pack(pady=5)

# সময় ইনপুটের জন্য এন্ট্রি ফিল্ড (HH:MM ফরম্যাট)
tk.Label(root, text="Reminder Time (HH:MM):").pack(pady=5)
time_entry = tk.Entry(root, width=30, font=("Arial", 14))
time_entry.pack(pady=5)

# রিমাইন্ডার সেট করার ফাংশন
def set_reminder():
    task = task_entry.get()
    reminder_time = time_entry.get()
    
    if not task or not reminder_time:
        messagebox.showwarning("Warning", "Please enter both task and time!")
        return
    
    try:
        # সময় ফরম্যাট চেক করা
        reminder_datetime = datetime.strptime(reminder_time, "%H:%M").time()
        now = datetime.now()
        reminder_datetime = datetime.combine(now.date(), reminder_datetime)
        
        if reminder_datetime < now:
            reminder_datetime += timedelta(days=1)  # যদি সময় পার হয়ে যায়, তাহলে পরবর্তী দিনের জন্য সেট করা

        time_diff = (reminder_datetime - now).total_seconds()
        
        # ব্যাকগ্রাউন্ড থ্রেডে টাইমার শুরু করা
        threading.Thread(target=start_timer, args=(time_diff, task)).start()
        messagebox.showinfo("Success", f"Reminder set for {task} at {reminder_datetime.strftime('%H:%M')}")
    except ValueError:
        messagebox.showerror("Error", "Please enter time in HH:MM format!")

# টাইমার ফাংশন
def start_timer(seconds, task):
    time.sleep(seconds)
    messagebox.showinfo("Reminder", f"It's time for: {task}")

# রিমাইন্ডার সেট করার বাটন
set_reminder_button = tk.Button(root, text="Set Reminder", command=set_reminder, font=("Arial", 12))
set_reminder_button.pack(pady=20)

root.mainloop()

কোড ব্যাখ্যা

GUI সেটআপ: Tkinter GUI তৈরি করা হয়েছে এবং ব্যবহারকারীর জন্য ইনপুট ফিল্ড এবং বাটন যুক্ত করা হয়েছে।

set_reminder() ফাংশন: এই ফাংশনটি ব্যবহারকারীর টাস্ক এবং সময় ইনপুট নিয়ে তা যাচাই করে। যদি ইনপুট সঠিক হয়, তাহলে একটি থ্রেড চালানো হয় যেখানে start_timer() ফাংশন কল করা হয়।

start_timer() ফাংশন: এটি একটি নির্দিষ্ট সময়ের জন্য অপেক্ষা করে এবং সময় শেষ হলে একটি নোটিফিকেশন বা পপ-আপ দেখায় যাতে টাস্কের কথা মনে করিয়ে দেয়া হয়।

Threading: থ্রেডিং ব্যবহার করা হয়েছে যাতে অ্যাপটি রিমাইন্ডার চলাকালীন ব্লক না হয় এবং ব্যবহারকারী একাধিক রিমাইন্ডার যোগ করতে পারে।


উপসংহার

এই রিমাইন্ডার অ্যাপটি Tkinter এবং Python এর অন্যান্য বিল্ট-ইন মডিউল ব্যবহার করে তৈরি করা হয়েছে। এর মাধ্যমে ব্যবহারকারী নির্দিষ্ট সময়ের জন্য রিমাইন্ডার সেট করতে পারবে এবং সময় হলে একটি নোটিফিকেশন পপ-আপের মাধ্যমে টাস্কের কথা মনে করিয়ে দেবে। চাইলে একে আরও উন্নত করতে অ্যাপটিতে একাধিক রিমাইন্ডার প্রদর্শন, ডাটাবেস সংযুক্তি, এবং একাধিক দিনের জন্য রিমাইন্ডার সেট করার মতো ফিচার যোগ করা যেতে পারে।

Content added By

কুইজ গেম

417

একটি কুইজ গেম তৈরি করা একটি মজার ও কার্যকরী প্রোজেক্ট, যা Python ও Tkinter ব্যবহার করে সহজেই করা যায়। এই গেমে বিভিন্ন প্রশ্ন, তাদের অপশন ও সঠিক উত্তর রাখা হবে, এবং ব্যবহারকারী প্রশ্নের উত্তর প্রদান করতে পারবেন। প্রতিটি সঠিক উত্তরের জন্য একটি স্কোর দেয়া হবে।


প্রজেক্ট: কুইজ গেম অ্যাপ্লিকেশন

ফিচারস

  1. বিভিন্ন প্রশ্ন এবং উত্তর অপশন থাকবে।
  2. সঠিক উত্তর দিলে স্কোর বাড়বে।
  3. সব প্রশ্ন শেষ হলে চূড়ান্ত স্কোর দেখানো হবে।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।

Step 1: Tkinter ইম্পোর্ট এবং GUI সেটআপ করা

import tkinter as tk
from tkinter import messagebox

Step 2: প্রশ্ন এবং উত্তর তৈরি

প্রথমে কিছু প্রশ্ন এবং উত্তর একটি ডাটাতে সংরক্ষণ করা হবে। এখানে প্রতিটি প্রশ্নে চারটি অপশন থাকবে এবং সঠিক উত্তর আলাদাভাবে রাখা হবে।

questions = [
    {"question": "What is the capital of France?", "options": ["Berlin", "Madrid", "Paris", "Rome"], "answer": "Paris"},
    {"question": "What is the largest planet in our Solar System?", "options": ["Earth", "Mars", "Jupiter", "Venus"], "answer": "Jupiter"},
    {"question": "Which language is primarily used for web development?", "options": ["Python", "HTML", "C++", "Java"], "answer": "HTML"},
    {"question": "What is the square root of 64?", "options": ["6", "7", "8", "9"], "answer": "8"},
    {"question": "Who wrote 'Romeo and Juliet'?", "options": ["Leo Tolstoy", "Charles Dickens", "William Shakespeare", "Mark Twain"], "answer": "William Shakespeare"}
]

Step 3: গেমের মূল ফাংশন এবং স্কোর ট্র্যাকিং

এই ফাংশনটি বর্তমান প্রশ্ন এবং ব্যবহারকারীর স্কোর ট্র্যাক করবে। সঠিক উত্তর দেয়ার জন্য স্কোর বাড়বে এবং প্রশ্ন শেষ হলে চূড়ান্ত স্কোর দেখানো হবে।

current_question = 0
score = 0

def check_answer(selected_option):
    global current_question, score
    
    # যদি সঠিক উত্তর হয়, স্কোর বাড়ানো হবে
    if selected_option == questions[current_question]["answer"]:
        score += 1
    
    # পরবর্তী প্রশ্নের দিকে যাওয়া
    current_question += 1
    if current_question < len(questions):
        display_question()
    else:
        show_final_score()

def show_final_score():
    messagebox.showinfo("Quiz Over", f"Your final score is: {score}/{len(questions)}")
    root.quit()

Step 4: প্রশ্ন এবং অপশন প্রদর্শন ফাংশন

এই ফাংশনটি বর্তমান প্রশ্ন এবং অপশনগুলো GUI-তে দেখাবে। ব্যবহারকারী এক অপশন নির্বাচন করতে পারবে।

def display_question():
    question_label.config(text=questions[current_question]["question"])
    option_var.set(None)
    for index, option in enumerate(questions[current_question]["options"]):
        option_buttons[index].config(text=option, value=option)

Step 5: Tkinter GUI সেটআপ করা

Tkinter GUI উইন্ডো তৈরি করে প্রশ্ন এবং অপশনগুলোর জন্য উইজেট তৈরি করা হবে।

root = tk.Tk()
root.title("Quiz Game")
root.geometry("400x300")

# প্রশ্ন প্রদর্শনের জন্য লেবেল
question_label = tk.Label(root, text="", font=("Arial", 14), wraplength=300)
question_label.pack(pady=20)

# অপশনগুলো সংরক্ষণের জন্য ভ্যারিয়েবল এবং বোতাম তৈরি
option_var = tk.StringVar()

option_buttons = []
for i in range(4):
    btn = tk.Radiobutton(root, text="", variable=option_var, font=("Arial", 12), value="", command=lambda: check_answer(option_var.get()))
    btn.pack(anchor="w", padx=20, pady=5)
    option_buttons.append(btn)

# প্রথম প্রশ্ন প্রদর্শন করা
display_question()

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox

# প্রশ্ন এবং উত্তর ডাটা
questions = [
    {"question": "What is the capital of France?", "options": ["Berlin", "Madrid", "Paris", "Rome"], "answer": "Paris"},
    {"question": "What is the largest planet in our Solar System?", "options": ["Earth", "Mars", "Jupiter", "Venus"], "answer": "Jupiter"},
    {"question": "Which language is primarily used for web development?", "options": ["Python", "HTML", "C++", "Java"], "answer": "HTML"},
    {"question": "What is the square root of 64?", "options": ["6", "7", "8", "9"], "answer": "8"},
    {"question": "Who wrote 'Romeo and Juliet'?", "options": ["Leo Tolstoy", "Charles Dickens", "William Shakespeare", "Mark Twain"], "answer": "William Shakespeare"}
]

# গ্লোবাল ভ্যারিয়েবল
current_question = 0
score = 0

# সঠিক উত্তর চেক করা এবং পরবর্তী প্রশ্নে যাওয়া
def check_answer(selected_option):
    global current_question, score
    
    if selected_option == questions[current_question]["answer"]:
        score += 1
    
    current_question += 1
    if current_question < len(questions):
        display_question()
    else:
        show_final_score()

# চূড়ান্ত স্কোর দেখানো
def show_final_score():
    messagebox.showinfo("Quiz Over", f"Your final score is: {score}/{len(questions)}")
    root.quit()

# প্রশ্ন এবং অপশন প্রদর্শন
def display_question():
    question_label.config(text=questions[current_question]["question"])
    option_var.set(None)
    for index, option in enumerate(questions[current_question]["options"]):
        option_buttons[index].config(text=option, value=option)

# Tkinter GUI সেটআপ
root = tk.Tk()
root.title("Quiz Game")
root.geometry("400x300")

# প্রশ্ন লেবেল
question_label = tk.Label(root, text="", font=("Arial", 14), wraplength=300)
question_label.pack(pady=20)

# অপশন বোতাম
option_var = tk.StringVar()
option_buttons = []
for i in range(4):
    btn = tk.Radiobutton(root, text="", variable=option_var, font=("Arial", 12), value="", command=lambda: check_answer(option_var.get()))
    btn.pack(anchor="w", padx=20, pady=5)
    option_buttons.append(btn)

# প্রথম প্রশ্ন প্রদর্শন
display_question()

root.mainloop()

কোড ব্যাখ্যা

Questions List: প্রশ্ন এবং অপশন questions তালিকায় সংরক্ষিত আছে, যেখানে প্রতিটি প্রশ্নের সঠিক উত্তরও উল্লেখ করা আছে।

check_answer() Function: ব্যবহারকারী যে অপশন সিলেক্ট করেছেন তা সঠিক কিনা তা চেক করে। সঠিক হলে স্কোর বৃদ্ধি পায় এবং প্রশ্নের সংখ্যা বৃদ্ধি করে পরবর্তী প্রশ্নে চলে যায়। সব প্রশ্ন শেষ হলে show_final_score() কল হয়।

display_question() Function: বর্তমান প্রশ্ন এবং অপশনগুলো GUI-তে দেখায়।

Tkinter GUI Setup: Tkinter দিয়ে একটি GUI তৈরি করা হয়েছে যেখানে প্রতিটি প্রশ্নের জন্য চারটি অপশন রয়েছে এবং ব্যবহারকারী এক অপশন নির্বাচন করতে পারবেন।


উপসংহার

এই কুইজ গেমটি Python Tkinter ব্যবহার করে সহজেই তৈরি করা যায়। এই প্রজেক্টটি Python-এ GUI প্রোগ্রামিং এবং বিভিন্ন প্রশ্ন-উত্তর কনসেপ্টে দক্ষতা বাড়াবে। চাইলে এই গেমে আরও ফিচার যোগ করা যায়, যেমন:

  • দৈবভাবে প্রশ্ন নির্বাচন (randomized questions)
  • টাইমার যুক্ত করা (সীমিত সময়ে উত্তর দিতে হবে)
  • বিভিন্ন ক্যাটাগরির প্রশ্ন
Content added By

পাসওয়ার্ড জেনারেটর

302

পাসওয়ার্ড জেনারেটর একটি প্রোজেক্ট, যা বিভিন্ন ধরণের ক্যারেক্টার ব্যবহার করে র্যান্ডম পাসওয়ার্ড তৈরি করতে সাহায্য করে। Python-এ Tkinter ব্যবহার করে একটি GUI পাসওয়ার্ড জেনারেটর তৈরি করা সম্ভব। এই প্রোজেক্টটি বিশেষ করে তখন কার্যকরী যখন শক্তিশালী পাসওয়ার্ড তৈরি করতে হয়, যা সাধারণ অনুমান করা কঠিন।


প্রজেক্ট: পাসওয়ার্ড জেনারেটর

ফিচারস

  1. ব্যবহারকারী পাসওয়ার্ডের দৈর্ঘ্য নির্ধারণ করতে পারবেন।
  2. পাসওয়ার্ডে কি ধরনের ক্যারেক্টার থাকতে হবে তা নির্ধারণ করতে পারবেন (যেমন, ছোট হাতের অক্ষর, বড় হাতের অক্ষর, সংখ্যা এবং বিশেষ চিহ্ন)।
  3. জেনারেট করা পাসওয়ার্ড একটি টেক্সট বক্সে দেখানো হবে এবং চাইলে পাসওয়ার্ডটি কপি করা যাবে।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরির জন্য।
  • random: র্যান্ডম পাসওয়ার্ড তৈরি করার জন্য।

Step 1: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
import random
import string

Step 2: Tkinter GUI সেটআপ এবং এন্ট্রি ফিল্ড তৈরি

Tkinter GUI তৈরি করে ব্যবহারকারীকে পাসওয়ার্ডের দৈর্ঘ্য এবং অন্যান্য সেটিংস দিতে পারবেন।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Password Generator")
root.geometry("400x400")

# পাসওয়ার্ডের দৈর্ঘ্য নির্ধারণের লেবেল এবং এন্ট্রি ফিল্ড
tk.Label(root, text="Password Length:").pack(pady=5)
length_entry = tk.Entry(root, width=5)
length_entry.pack(pady=5)

# পাসওয়ার্ডে ক্যারেক্টার অন্তর্ভুক্ত করার জন্য চেকবক্স
include_uppercase = tk.BooleanVar()
include_numbers = tk.BooleanVar()
include_symbols = tk.BooleanVar()

tk.Checkbutton(root, text="Include Uppercase Letters", variable=include_uppercase).pack(anchor="w")
tk.Checkbutton(root, text="Include Numbers", variable=include_numbers).pack(anchor="w")
tk.Checkbutton(root, text="Include Symbols", variable=include_symbols).pack(anchor="w")

Step 3: পাসওয়ার্ড জেনারেট করার ফাংশন তৈরি

এই ফাংশনটি ব্যবহারকারীর পছন্দমত ক্যারেক্টার অন্তর্ভুক্ত করে একটি র্যান্ডম পাসওয়ার্ড তৈরি করবে।

def generate_password():
    try:
        length = int(length_entry.get())
        if length <= 0:
            raise ValueError("Length must be positive")
        
        characters = string.ascii_lowercase
        if include_uppercase.get():
            characters += string.ascii_uppercase
        if include_numbers.get():
            characters += string.digits
        if include_symbols.get():
            characters += string.punctuation
        
        if not characters:
            messagebox.showwarning("Warning", "Please select at least one character type.")
            return
        
        password = ''.join(random.choice(characters) for i in range(length))
        password_entry.delete(0, tk.END)
        password_entry.insert(0, password)
    except ValueError:
        messagebox.showerror("Error", "Please enter a valid length.")

Step 4: কপি টু ক্লিপবোর্ড ফাংশন

এই ফাংশনটি জেনারেট করা পাসওয়ার্ডটি ক্লিপবোর্ডে কপি করবে।

def copy_to_clipboard():
    password = password_entry.get()
    if password:
        root.clipboard_clear()
        root.clipboard_append(password)
        messagebox.showinfo("Copied", "Password copied to clipboard!")
    else:
        messagebox.showwarning("Warning", "No password to copy.")

Step 5: GUI উইজেট এবং বাটন তৈরি

Tkinter GUI-তে পাসওয়ার্ড জেনারেটর এবং কপি বাটন তৈরি করুন।

# পাসওয়ার্ড দেখানোর জন্য এন্ট্রি ফিল্ড
password_entry = tk.Entry(root, font=("Arial", 14), width=25)
password_entry.pack(pady=10)

# পাসওয়ার্ড জেনারেটর বাটন
generate_button = tk.Button(root, text="Generate Password", command=generate_password, font=("Arial", 12))
generate_button.pack(pady=10)

# কপি বাটন
copy_button = tk.Button(root, text="Copy to Clipboard", command=copy_to_clipboard, font=("Arial", 12))
copy_button.pack(pady=10)

Step 6: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
import random
import string

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Password Generator")
root.geometry("400x400")

# পাসওয়ার্ডের দৈর্ঘ্য নির্ধারণের লেবেল এবং এন্ট্রি ফিল্ড
tk.Label(root, text="Password Length:").pack(pady=5)
length_entry = tk.Entry(root, width=5)
length_entry.pack(pady=5)

# পাসওয়ার্ডে ক্যারেক্টার অন্তর্ভুক্ত করার জন্য চেকবক্স
include_uppercase = tk.BooleanVar()
include_numbers = tk.BooleanVar()
include_symbols = tk.BooleanVar()

tk.Checkbutton(root, text="Include Uppercase Letters", variable=include_uppercase).pack(anchor="w")
tk.Checkbutton(root, text="Include Numbers", variable=include_numbers).pack(anchor="w")
tk.Checkbutton(root, text="Include Symbols", variable=include_symbols).pack(anchor="w")

# পাসওয়ার্ড জেনারেট করার ফাংশন
def generate_password():
    try:
        length = int(length_entry.get())
        if length <= 0:
            raise ValueError("Length must be positive")
        
        characters = string.ascii_lowercase
        if include_uppercase.get():
            characters += string.ascii_uppercase
        if include_numbers.get():
            characters += string.digits
        if include_symbols.get():
            characters += string.punctuation
        
        if not characters:
            messagebox.showwarning("Warning", "Please select at least one character type.")
            return
        
        password = ''.join(random.choice(characters) for i in range(length))
        password_entry.delete(0, tk.END)
        password_entry.insert(0, password)
    except ValueError:
        messagebox.showerror("Error", "Please enter a valid length.")

# কপি টু ক্লিপবোর্ড ফাংশন
def copy_to_clipboard():
    password = password_entry.get()
    if password:
        root.clipboard_clear()
        root.clipboard_append(password)
        messagebox.showinfo("Copied", "Password copied to clipboard!")
    else:
        messagebox.showwarning("Warning", "No password to copy.")

# পাসওয়ার্ড দেখানোর জন্য এন্ট্রি ফিল্ড
password_entry = tk.Entry(root, font=("Arial", 14), width=25)
password_entry.pack(pady=10)

# পাসওয়ার্ড জেনারেটর বাটন
generate_button = tk.Button(root, text="Generate Password", command=generate_password, font=("Arial", 12))
generate_button.pack(pady=10)

# কপি বাটন
copy_button = tk.Button(root, text="Copy to Clipboard", command=copy_to_clipboard, font=("Arial", 12))
copy_button.pack(pady=10)

root.mainloop()

কোড ব্যাখ্যা

  1. Length Entry Field: পাসওয়ার্ডের দৈর্ঘ্য ইনপুট নেওয়ার জন্য একটি ইনপুট ফিল্ড আছে।
  2. Character Type Checkbox: ক্যারেক্টারের ধরন (বড় হাতের অক্ষর, সংখ্যা, এবং বিশেষ চিহ্ন) সিলেক্ট করার জন্য চেকবক্স আছে।
  3. generate_password() Function: এই ফাংশনটি ব্যবহারকারীর ইচ্ছা অনুযায়ী পাসওয়ার্ড তৈরি করে এবং ইনপুট ফিল্ডে প্রদর্শন করে।
  4. copy_to_clipboard() Function: তৈরি করা পাসওয়ার্ডটি ক্লিপবোর্ডে কপি করে।
  5. Buttons: পাসওয়ার্ড জেনারেট এবং কপি করার জন্য পৃথক দুটি বাটন রয়েছে।

উপসংহার

এই পাসওয়ার্ড জেনারেটর অ্যাপটি একটি কার্যকরী টুল যা নিরাপদ ও শক্তিশালী পাসওয়ার্ড তৈরি করতে ব্যবহার করা যায়। এটি সহজে কাস্টমাইজ করা যায় এবং আরও ফিচার যেমন পাসওয়ার্ড শক্তি যাচাই বা সংরক্ষণ ফিচার যুক্ত করা সম্ভব।

Content added By

রিয়েল টাইম ওয়েদার অ্যাপ

259

রিয়েল-টাইম ওয়েদার অ্যাপ হলো এমন একটি অ্যাপ্লিকেশন যা ব্যবহারকারীদের নির্দিষ্ট শহরের বর্তমান আবহাওয়ার তথ্য সরবরাহ করে। এই প্রোজেক্টে আমরা Python-এর Tkinter এবং OpenWeatherMap API ব্যবহার করে একটি রিয়েল-টাইম ওয়েদার অ্যাপ তৈরি করব।


প্রজেক্ট: রিয়েল-টাইম ওয়েদার অ্যাপ

ফিচারস

  1. ব্যবহারকারীর ইনপুট অনুযায়ী নির্দিষ্ট শহরের বর্তমান তাপমাত্রা, আবহাওয়া বিবরণ, আর্দ্রতা, এবং বাতাসের গতি দেখানো।
  2. Tkinter এর GUI ব্যবহার করে সহজ ইন্টারফেস প্রদান।
  3. API ব্যবহার করে রিয়েল-টাইম ডেটা রিটার্ন করা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • requests: OpenWeatherMap API থেকে ডেটা সংগ্রহ করতে।

প্রথমে টার্মিনালে requests লাইব্রেরি ইন্সটল করতে হবে:

pip install requests

Step 1: OpenWeatherMap API কী সংগ্রহ করা

OpenWeatherMap API থেকে একটি API কী প্রয়োজন, যা OpenWeatherMap ওয়েবসাইটে একটি বিনামূল্যে অ্যাকাউন্ট খুলে সহজেই পাওয়া যায়।


Step 2: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
import requests

Step 3: Tkinter GUI সেটআপ এবং এন্ট্রি ফিল্ড তৈরি

Tkinter GUI তৈরি করে ব্যবহারকারীদের কাছে শহরের নাম ইনপুট নেয়ার ব্যবস্থা করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Real-Time Weather App")
root.geometry("400x400")

# শহরের নামের লেবেল এবং এন্ট্রি ফিল্ড
tk.Label(root, text="Enter City Name:", font=("Arial", 14)).pack(pady=10)
city_entry = tk.Entry(root, font=("Arial", 14), width=20)
city_entry.pack(pady=10)

Step 4: আবহাওয়া ডেটা রিটার্ন করার ফাংশন তৈরি

এই ফাংশনটি ব্যবহারকারীর ইনপুট শহর অনুযায়ী OpenWeatherMap API কল করবে এবং আবহাওয়া সংক্রান্ত তথ্য ফিরিয়ে দেবে।

def get_weather():
    city = city_entry.get()
    api_key = "YOUR_API_KEY"  # এখানে আপনার API কী লিখুন
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"

    try:
        response = requests.get(url)
        data = response.json()

        if data["cod"] == 200:
            temp = data["main"]["temp"]
            weather_desc = data["weather"][0]["description"]
            humidity = data["main"]["humidity"]
            wind_speed = data["wind"]["speed"]

            result = f"City: {city}\nTemperature: {temp}°C\nWeather: {weather_desc}\nHumidity: {humidity}%\nWind Speed: {wind_speed} m/s"
            result_label.config(text=result)
        else:
            messagebox.showerror("Error", f"City '{city}' not found!")
    except requests.exceptions.RequestException:
        messagebox.showerror("Error", "Failed to retrieve data. Please check your internet connection.")

Step 5: GUI উইজেট এবং বাটন তৈরি

Tkinter GUI-তে আবহাওয়া দেখানোর জন্য একটি Get Weather বাটন এবং একটি লেবেল তৈরি করা হবে।

# আবহাওয়া ডেটা দেখানোর জন্য লেবেল
result_label = tk.Label(root, text="", font=("Arial", 12), justify="left")
result_label.pack(pady=20)

# আবহাওয়া তথ্য রিটার্ন করার বাটন
get_weather_button = tk.Button(root, text="Get Weather", command=get_weather, font=("Arial", 12))
get_weather_button.pack(pady=10)

Step 6: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
import requests

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Real-Time Weather App")
root.geometry("400x400")

# শহরের নামের লেবেল এবং এন্ট্রি ফিল্ড
tk.Label(root, text="Enter City Name:", font=("Arial", 14)).pack(pady=10)
city_entry = tk.Entry(root, font=("Arial", 14), width=20)
city_entry.pack(pady=10)

# আবহাওয়া ডেটা রিটার্ন করার ফাংশন
def get_weather():
    city = city_entry.get()
    api_key = "YOUR_API_KEY"  # এখানে আপনার API কী লিখুন
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"

    try:
        response = requests.get(url)
        data = response.json()

        if data["cod"] == 200:
            temp = data["main"]["temp"]
            weather_desc = data["weather"][0]["description"]
            humidity = data["main"]["humidity"]
            wind_speed = data["wind"]["speed"]

            result = f"City: {city}\nTemperature: {temp}°C\nWeather: {weather_desc}\nHumidity: {humidity}%\nWind Speed: {wind_speed} m/s"
            result_label.config(text=result)
        else:
            messagebox.showerror("Error", f"City '{city}' not found!")
    except requests.exceptions.RequestException:
        messagebox.showerror("Error", "Failed to retrieve data. Please check your internet connection.")

# আবহাওয়া ডেটা দেখানোর জন্য লেবেল
result_label = tk.Label(root, text="", font=("Arial", 12), justify="left")
result_label.pack(pady=20)

# আবহাওয়া তথ্য রিটার্ন করার বাটন
get_weather_button = tk.Button(root, text="Get Weather", command=get_weather, font=("Arial", 12))
get_weather_button.pack(pady=10)

root.mainloop()

কোড ব্যাখ্যা

  1. city_entry: ব্যবহারকারীর কাছ থেকে শহরের নাম ইনপুট নেয়ার জন্য একটি Entry উইজেট।
  2. get_weather() Function: এই ফাংশনটি OpenWeatherMap API থেকে নির্দিষ্ট শহরের আবহাওয়া তথ্য সংগ্রহ করে এবং তা প্রক্রিয়াকরণ করে result_label-এ দেখায়।
  3. API Key: OpenWeatherMap API-তে YOUR_API_KEY এর জায়গায় আপনার প্রাপ্ত API কী বসাতে হবে।
  4. result_label: আবহাওয়ার তথ্য ব্যবহারকারীর কাছে দেখানোর জন্য একটি লেবেল।
  5. Error Handling: try-except ব্যবহার করে API কল করার সময় যদি কোনো সমস্যা হয়, তবে ব্যবহারকারীকে ত্রুটির বার্তা দেখানো হয়।

উপসংহার

এই রিয়েল-টাইম ওয়েদার অ্যাপটি Python Tkinter এবং OpenWeatherMap API ব্যবহার করে তৈরি করা হয়েছে। এটি ব্যবহারকারীর ইনপুট শহরের আবহাওয়া, তাপমাত্রা, আর্দ্রতা এবং বাতাসের গতি দেখাতে সক্ষম। এই প্রোজেক্টটি Python-এ API ব্যবহার এবং GUI অ্যাপ্লিকেশন তৈরির জন্য একটি চমৎকার উদাহরণ।

Content added By

ব্যায়াম ট্র্যাকার অ্যাপ

264

একটি ব্যায়াম ট্র্যাকার অ্যাপ তৈরি করা একটি কার্যকরী প্রোজেক্ট হতে পারে। এই অ্যাপ ব্যবহারকারীদের দৈনিক ব্যায়াম কার্যক্রম ট্র্যাক করতে সাহায্য করবে। Python-এর Tkinter এবং SQLite ডাটাবেস ব্যবহার করে সহজেই একটি ব্যায়াম ট্র্যাকার অ্যাপ তৈরি করা সম্ভব।


প্রজেক্ট: ব্যায়াম ট্র্যাকার অ্যাপ

ফিচারস

  1. এক্সারসাইজ যোগ করা: প্রতিদিনের ব্যায়াম কার্যক্রম যোগ করার ব্যবস্থা।
  2. ডাটাবেস সংরক্ষণ: SQLite ডাটাবেসে এক্সারসাইজ তথ্য সংরক্ষণ।
  3. ডেইলি এক্সারসাইজ দেখানো: প্রতিদিনের ব্যায়ামের তালিকা দেখানো।
  4. পরিসংখ্যান: মোট সময় বা ক্যালোরি বার্ন ট্র্যাক করা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • sqlite3: ডাটাবেস পরিচালনা করতে।

Python-এর SQLite এবং Tkinter লাইব্রেরি ইনস্টলেশনের প্রয়োজন নেই, কারণ এগুলো Python-এর সাথে বিল্ট-ইন আছে।


Step 1: Tkinter এবং SQLite ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
import sqlite3

Step 2: SQLite ডাটাবেস তৈরি করা

SQLite ডাটাবেসে একটি টেবিল তৈরি করা হবে, যেখানে প্রতিটি এক্সারসাইজের নাম, সময় (মিনিটে) এবং ক্যালোরি বার্ন সংরক্ষণ করা হবে।

# ডাটাবেস তৈরি এবং টেবিল সেটআপ
conn = sqlite3.connect("exercise_tracker.db")
cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS exercises (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        duration INTEGER NOT NULL,
        calories INTEGER NOT NULL,
        date TEXT NOT NULL
    )
""")
conn.commit()

Step 3: Tkinter GUI সেটআপ এবং এন্ট্রি ফিল্ড তৈরি

Tkinter GUI তৈরি করে ব্যবহারকারীর এক্সারসাইজের নাম, সময় এবং ক্যালোরি ইনপুট দেয়ার ব্যবস্থা করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Exercise Tracker")
root.geometry("400x400")

# এক্সারসাইজ নামের এন্ট্রি ফিল্ড
tk.Label(root, text="Exercise Name:", font=("Arial", 12)).pack(pady=5)
exercise_name_entry = tk.Entry(root, font=("Arial", 12), width=30)
exercise_name_entry.pack(pady=5)

# সময় এন্ট্রি ফিল্ড (মিনিটে)
tk.Label(root, text="Duration (in minutes):", font=("Arial", 12)).pack(pady=5)
duration_entry = tk.Entry(root, font=("Arial", 12), width=30)
duration_entry.pack(pady=5)

# ক্যালোরি বার্ন এন্ট্রি ফিল্ড
tk.Label(root, text="Calories Burned:", font=("Arial", 12)).pack(pady=5)
calories_entry = tk.Entry(root, font=("Arial", 12), width=30)
calories_entry.pack(pady=5)

Step 4: এক্সারসাইজ যোগ করার ফাংশন তৈরি

এই ফাংশনটি ব্যবহারকারীর ইনপুট তথ্য নিয়ে ডাটাবেসে সংরক্ষণ করবে।

from datetime import datetime

def add_exercise():
    name = exercise_name_entry.get()
    duration = duration_entry.get()
    calories = calories_entry.get()
    date = datetime.now().strftime("%Y-%m-%d")
    
    if name and duration.isdigit() and calories.isdigit():
        cursor.execute("INSERT INTO exercises (name, duration, calories, date) VALUES (?, ?, ?, ?)", (name, int(duration), int(calories), date))
        conn.commit()
        messagebox.showinfo("Success", "Exercise added successfully!")
        clear_entries()
        display_exercises()
    else:
        messagebox.showwarning("Warning", "Please enter valid details.")

Step 5: এন্ট্রি ফিল্ড ক্লিয়ার করার ফাংশন

def clear_entries():
    exercise_name_entry.delete(0, tk.END)
    duration_entry.delete(0, tk.END)
    calories_entry.delete(0, tk.END)

Step 6: এক্সারসাইজ প্রদর্শন ফাংশন

এই ফাংশনটি সমস্ত এক্সারসাইজ ডাটাবেস থেকে ফেচ করবে এবং GUI-তে দেখাবে।

def display_exercises():
    exercise_listbox.delete(0, tk.END)
    cursor.execute("SELECT name, duration, calories, date FROM exercises")
    for row in cursor.fetchall():
        exercise_listbox.insert(tk.END, f"{row[3]}: {row[0]} - {row[1]} mins, {row[2]} cal")

Step 7: Tkinter GUI উইজেট এবং বাটন তৈরি

# এক্সারসাইজ যোগ করার বাটন
add_button = tk.Button(root, text="Add Exercise", command=add_exercise, font=("Arial", 12))
add_button.pack(pady=10)

# এক্সারসাইজ লিস্ট দেখানোর জন্য লিস্টবক্স
exercise_listbox = tk.Listbox(root, width=50, height=10, font=("Arial", 10))
exercise_listbox.pack(pady=10)

display_exercises()  # প্রাথমিকভাবে ডাটাবেসের এক্সারসাইজ লোড করা

Step 8: Tkinter মেইন লুপ চালানো

root.mainloop()
conn.close()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
import sqlite3
from datetime import datetime

# ডাটাবেস তৈরি এবং টেবিল সেটআপ
conn = sqlite3.connect("exercise_tracker.db")
cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS exercises (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        duration INTEGER NOT NULL,
        calories INTEGER NOT NULL,
        date TEXT NOT NULL
    )
""")
conn.commit()

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Exercise Tracker")
root.geometry("400x400")

# এক্সারসাইজ নামের এন্ট্রি ফিল্ড
tk.Label(root, text="Exercise Name:", font=("Arial", 12)).pack(pady=5)
exercise_name_entry = tk.Entry(root, font=("Arial", 12), width=30)
exercise_name_entry.pack(pady=5)

# সময় এন্ট্রি ফিল্ড (মিনিটে)
tk.Label(root, text="Duration (in minutes):", font=("Arial", 12)).pack(pady=5)
duration_entry = tk.Entry(root, font=("Arial", 12), width=30)
duration_entry.pack(pady=5)

# ক্যালোরি বার্ন এন্ট্রি ফিল্ড
tk.Label(root, text="Calories Burned:", font=("Arial", 12)).pack(pady=5)
calories_entry = tk.Entry(root, font=("Arial", 12), width=30)
calories_entry.pack(pady=5)

# এক্সারসাইজ যোগ করার ফাংশন
def add_exercise():
    name = exercise_name_entry.get()
    duration = duration_entry.get()
    calories = calories_entry.get()
    date = datetime.now().strftime("%Y-%m-%d")
    
    if name and duration.isdigit() and calories.isdigit():
        cursor.execute("INSERT INTO exercises (name, duration, calories, date) VALUES (?, ?, ?, ?)", (name, int(duration), int(calories), date))
        conn.commit()
        messagebox.showinfo("Success", "Exercise added successfully!")
        clear_entries()
        display_exercises()
    else:
        messagebox.showwarning("Warning", "Please enter valid details.")

# এন্ট্রি ফিল্ড ক্লিয়ার করার ফাংশন
def clear_entries():
    exercise_name_entry.delete(0, tk.END)
    duration_entry.delete(0, tk.END)
    calories_entry.delete(0, tk.END)

# এক্সারসাইজ প্রদর্শন ফাংশন
def display_exercises():
    exercise_listbox.delete(0, tk.END)
    cursor.execute("SELECT name, duration, calories, date FROM exercises")
    for row in cursor.fetchall():
        exercise_listbox.insert(tk.END, f"{row[3]}: {row[0]} - {row[1]} mins, {row[2]} cal")

# এক্সারসাইজ যোগ করার বাটন
add_button = tk.Button(root, text="Add Exercise", command=add_exercise, font=("Arial", 12))
add_button.pack(pady=10)

# এক্সারসাইজ লিস্ট দেখানোর জন্য লিস্টবক্স
exercise_listbox = tk.Listbox(root, width=50, height=10, font=("Arial", 10))
exercise_listbox.pack(pady=10)

display_exercises()  # প্রাথমিকভাবে ডাটাবেসের এক্সারসাইজ লোড করা

root.mainloop()
conn.close()

কোড ব্যাখ্যা

SQLite Database: exercise_tracker.db নামে একটি SQLite ডাটাবেস তৈরি করা হয়েছে এবং exercises টেবিল তৈরি করা হয়েছে, যেখানে প্রতিটি এক্সারসাইজের নাম, সময়, ক্যালোরি এবং তারিখ সংরক্ষণ করা হয়।

Tkinter GUI: Tkinter GUI তৈরি করা হয়েছে, যাতে ব্যবহারকারীরা এক্সারসাইজের নাম, সময় (মিনিটে) এবং ক্যালোরি ইনপুট দিতে পারেন।

add_exercise() Function: ইনপুট ফিল্ড থেকে ডেটা নিয়ে তা ডাটাবেসে সংরক্ষণ করে এবং GUI-তে প্রদর্শন করে।

display_exercises() Function: ডাটাবেস থেকে সমস্ত এক্সারসাইজের তথ্য সংগ্রহ করে GUI-তে প্রদর্শন করে।


উপসংহার

এই ব্যায়াম ট্র্যাকার অ্যাপটি দৈনন্দিন ব্যায়ামের কার্যক্রম ট্র্যাক করতে একটি কার্যকরী টুল। SQLite ডাটাবেস ব্যবহার করে সকল তথ্য সংরক্ষণ করা সম্ভব এবং চাইলে এর সাথে আরো ফিচার যেমন, মোট ক্যালোরি বার্ন বা মাসিক রিপোর্ট যোগ করা যায়।

Content added By

ইমেজ প্রসেসিং অ্যাপ

278

ইমেজ প্রসেসিং অ্যাপ হলো এমন একটি প্রোজেক্ট যেখানে Python এবং OpenCV ব্যবহার করে বিভিন্ন ইমেজ প্রসেসিং অপারেশন করা যায়। এই অ্যাপে আমরা বিভিন্ন ইমেজ ফিল্টার, রিসাইজ, কালার পরিবর্তন ইত্যাদি প্রক্রিয়া সম্পাদন করব।


প্রজেক্ট: ইমেজ প্রসেসিং অ্যাপ

ফিচারস

  1. ইমেজ লোড করা: ব্যবহারকারী একটি ইমেজ লোড করতে পারবে।
  2. ফিল্টার এবং প্রসেসিং: বিভিন্ন ফিল্টার যেমন গ্রেস্কেল, ব্লার, এজ ডিটেকশন প্রয়োগ করা।
  3. রিসাইজ: ইমেজ রিসাইজ করা।
  4. সেভ: প্রক্রিয়াজাত ইমেজটি সংরক্ষণ করা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • opencv-python (cv2): ইমেজ প্রসেসিংয়ের জন্য।
  • PIL (Pillow): Tkinter GUI তে ইমেজ প্রদর্শনের জন্য।

প্রথমে টার্মিনালে নিচের কমান্ডগুলো চালিয়ে লাইব্রেরি ইন্সটল করতে হবে:

pip install opencv-python-headless pillow

Step 1: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import cv2
import numpy as np

Step 2: Tkinter GUI সেটআপ করা

Tkinter GUI তৈরি করে ব্যবহারকারীকে একটি ফাইল থেকে ইমেজ লোড করার জন্য একটি বোতাম তৈরি করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Image Processing App")
root.geometry("600x600")

# ইমেজ প্রদর্শনের জন্য লেবেল
image_label = tk.Label(root)
image_label.pack(pady=10)

Step 3: ইমেজ লোড এবং প্রদর্শন ফাংশন

এই ফাংশনটি ব্যবহারকারীকে ফাইল ডায়ালগ থেকে ইমেজ সিলেক্ট করতে দেয় এবং তা প্রদর্শন করে।

def load_image():
    global img, img_display

    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.jpeg *.png")])
    if file_path:
        img = cv2.imread(file_path)  # OpenCV ফরম্যাটে ইমেজ লোড করা
        display_image(img)

def display_image(image):
    # OpenCV ইমেজকে Pillow ইমেজে কনভার্ট করা
    img_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    img_pil = Image.fromarray(img_rgb)
    img_pil = img_pil.resize((400, 400))  # প্রদর্শনের জন্য রিসাইজ
    img_display = ImageTk.PhotoImage(img_pil)

    # ইমেজ লেবেলে প্রদর্শন করা
    image_label.config(image=img_display)

Step 4: ইমেজ প্রসেসিং ফাংশন তৈরি করা

1. গ্রেস্কেল ফিল্টার

def apply_grayscale():
    global img
    if img is not None:
        gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        display_image(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

2. ব্লার ফিল্টার

def apply_blur():
    global img
    if img is not None:
        blur_image = cv2.GaussianBlur(img, (15, 15), 0)
        display_image(blur_image)
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

3. এজ ডিটেকশন

def apply_edge_detection():
    global img
    if img is not None:
        edges = cv2.Canny(img, 100, 200)
        display_image(cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

Step 5: ইমেজ সেভ করার ফাংশন

এই ফাংশনটি প্রক্রিয়াজাত ইমেজটি সংরক্ষণ করবে।

def save_image():
    if img is not None:
        file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png")])
        if file_path:
            cv2.imwrite(file_path, img)
            messagebox.showinfo("Success", "Image saved successfully!")
    else:
        messagebox.showwarning("Warning", "Please load and process an image first.")

Step 6: Tkinter GUI-তে বাটন যুক্ত করা

Tkinter GUI তে ইমেজ লোড, প্রসেস এবং সেভ করার জন্য বাটন তৈরি করা হবে।

# ইমেজ লোড করার বাটন
load_button = tk.Button(root, text="Load Image", command=load_image, font=("Arial", 12))
load_button.pack(pady=5)

# প্রসেসিং অপশনগুলোর জন্য বাটন
gray_button = tk.Button(root, text="Apply Grayscale", command=apply_grayscale, font=("Arial", 12))
gray_button.pack(pady=5)

blur_button = tk.Button(root, text="Apply Blur", command=apply_blur, font=("Arial", 12))
blur_button.pack(pady=5)

edge_button = tk.Button(root, text="Apply Edge Detection", command=apply_edge_detection, font=("Arial", 12))
edge_button.pack(pady=5)

# ইমেজ সেভ করার বাটন
save_button = tk.Button(root, text="Save Image", command=save_image, font=("Arial", 12))
save_button.pack(pady=5)

Step 7: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import cv2
import numpy as np

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Image Processing App")
root.geometry("600x600")

# ইমেজ লেবেল
image_label = tk.Label(root)
image_label.pack(pady=10)

# গ্লোবাল ভ্যারিয়েবল
img = None
img_display = None

# ইমেজ লোড এবং প্রদর্শন ফাংশন
def load_image():
    global img, img_display

    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.jpeg *.png")])
    if file_path:
        img = cv2.imread(file_path)  # OpenCV ফরম্যাটে ইমেজ লোড করা
        display_image(img)

def display_image(image):
    img_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    img_pil = Image.fromarray(img_rgb)
    img_pil = img_pil.resize((400, 400))
    img_display = ImageTk.PhotoImage(img_pil)
    image_label.config(image=img_display)

# গ্রেস্কেল ফিল্টার
def apply_grayscale():
    global img
    if img is not None:
        gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        display_image(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

# ব্লার ফিল্টার
def apply_blur():
    global img
    if img is not None:
        blur_image = cv2.GaussianBlur(img, (15, 15), 0)
        display_image(blur_image)
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

# এজ ডিটেকশন
def apply_edge_detection():
    global img
    if img is not None:
        edges = cv2.Canny(img, 100, 200)
        display_image(cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

# ইমেজ সেভ করার ফাংশন
def save_image():
    if img is not None:
        file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png")])
        if file_path:
            cv2.imwrite(file_path, img)
            messagebox.showinfo("Success", "Image saved successfully!")
    else:
        messagebox.showwarning("Warning", "Please load and process an image first.")

# বাটনগুলো
load_button = tk.Button(root, text="Load Image", command=load_image, font=("Arial", 12))
load_button.pack(pady=5)

gray_button = tk.Button(root, text="Apply Grayscale", command=apply_grayscale, font=("Arial", 12))
gray_button.pack(pady=5)

blur_button = tk.Button(root, text="Apply Blur", command=apply_blur, font=("Arial", 12))
blur_button.pack(pady=5)

edge_button = tk.Button(root, text="Apply Edge Detection", command=apply_edge_detection, font=("Arial", 12))
edge_button.pack(pady=5)

save_button = tk.Button(root, text="Save Image", command=save_image, font=("Arial", 12))
save_button.pack(pady=5)

root.mainloop()

কোড ব্যাখ্যা

load_image() Function: ব্যবহারকারী ইমেজ লোড করলে OpenCV ব্যবহার করে তা পড়া হয় এবং Tkinter লেবেলে প্রদর্শিত হয়।

display_image() Function: OpenCV থেকে পাওয়া ইমেজকে Tkinter এর Label-এ দেখানোর জন্য কনভার্ট করা হয়।

apply_grayscale(), apply_blur(), apply_edge_detection() Functions: এই ফাংশনগুলো ইমেজের উপর বিভিন্ন প্রসেসিং অপারেশন করে এবং প্রসেসড ইমেজ display_image() ফাংশনের মাধ্যমে দেখানো হয়।

save_image() Function: প্রক্রিয়াজাত ইমেজটি নির্দিষ্ট ফরম্যাটে সেভ করে।


উপসংহার

এই ইমেজ প্রসেসিং অ্যাপটি একটি সহজ ও কার্যকরী টুল যা বিভিন্ন ধরনের ইমেজ প্রসেসিং অপারেশন পরিচালনা করতে সক্ষম। OpenCV এবং Tkinter ব্যবহার করে আরও অনেক ধরনের ফিল্টার এবং অপশন যোগ করা যেতে পারে।

Content added By

বুক ম্যানেজমেন্ট সিস্টেম

371

বুক ম্যানেজমেন্ট সিস্টেম একটি অ্যাপ্লিকেশন যা বিভিন্ন বইয়ের তথ্য সংরক্ষণ, প্রদর্শন, সম্পাদনা এবং মুছে ফেলার জন্য ব্যবহৃত হয়। Python Tkinter এবং SQLite ব্যবহার করে একটি সহজ বুক ম্যানেজমেন্ট সিস্টেম তৈরি করা সম্ভব।


প্রজেক্ট: বুক ম্যানেজমেন্ট সিস্টেম

ফিচারস

  1. বই যোগ করা: নতুন বইয়ের তথ্য সংরক্ষণ করা।
  2. বই খোঁজা: বইয়ের নাম বা লেখকের ভিত্তিতে বই খোঁজা।
  3. বই সম্পাদনা: বিদ্যমান বইয়ের তথ্য আপডেট করা।
  4. বই মুছে ফেলা: নির্দিষ্ট বই ডাটাবেস থেকে মুছে ফেলা।
  5. বইয়ের তালিকা দেখানো: ডাটাবেসে থাকা সমস্ত বইয়ের তালিকা দেখানো।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • sqlite3: ডাটাবেস পরিচালনা করতে।

Python-এর SQLite এবং Tkinter লাইব্রেরি বিল্ট-ইন থাকে, তাই আলাদাভাবে ইনস্টলেশনের প্রয়োজন নেই।


Step 1: Tkinter এবং SQLite ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
import sqlite3

Step 2: SQLite ডাটাবেস তৈরি করা

SQLite ডাটাবেসে একটি টেবিল তৈরি করা হবে, যেখানে প্রতিটি বইয়ের নাম, লেখক, প্রকাশকের নাম এবং বছর সংরক্ষণ করা হবে।

# ডাটাবেস তৈরি এবং টেবিল সেটআপ
conn = sqlite3.connect("books.db")
cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS books (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT NOT NULL,
        author TEXT NOT NULL,
        publisher TEXT,
        year INTEGER
    )
""")
conn.commit()

Step 3: Tkinter GUI সেটআপ এবং এন্ট্রি ফিল্ড তৈরি

Tkinter GUI তৈরি করে ব্যবহারকারীর বইয়ের নাম, লেখক, প্রকাশক এবং বছরের তথ্য ইনপুট দেয়ার ব্যবস্থা করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Book Management System")
root.geometry("600x400")

# বইয়ের তথ্যের জন্য এন্ট্রি ফিল্ড
tk.Label(root, text="Title:").grid(row=0, column=0, padx=10, pady=5)
title_entry = tk.Entry(root, width=40)
title_entry.grid(row=0, column=1, padx=10, pady=5)

tk.Label(root, text="Author:").grid(row=1, column=0, padx=10, pady=5)
author_entry = tk.Entry(root, width=40)
author_entry.grid(row=1, column=1, padx=10, pady=5)

tk.Label(root, text="Publisher:").grid(row=2, column=0, padx=10, pady=5)
publisher_entry = tk.Entry(root, width=40)
publisher_entry.grid(row=2, column=1, padx=10, pady=5)

tk.Label(root, text="Year:").grid(row=3, column=0, padx=10, pady=5)
year_entry = tk.Entry(root, width=40)
year_entry.grid(row=3, column=1, padx=10, pady=5)

Step 4: বই যোগ করার ফাংশন

এই ফাংশনটি ব্যবহারকারীর ইনপুট তথ্য নিয়ে ডাটাবেসে সংরক্ষণ করবে।

def add_book():
    title = title_entry.get()
    author = author_entry.get()
    publisher = publisher_entry.get()
    year = year_entry.get()

    if title and author:
        cursor.execute("INSERT INTO books (title, author, publisher, year) VALUES (?, ?, ?, ?)", (title, author, publisher, year))
        conn.commit()
        messagebox.showinfo("Success", "Book added successfully!")
        display_books()
        clear_entries()
    else:
        messagebox.showwarning("Warning", "Please enter both title and author.")

Step 5: বইয়ের তথ্য ক্লিয়ার করার ফাংশন

def clear_entries():
    title_entry.delete(0, tk.END)
    author_entry.delete(0, tk.END)
    publisher_entry.delete(0, tk.END)
    year_entry.delete(0, tk.END)

Step 6: বইয়ের তালিকা দেখানোর ফাংশন

এই ফাংশনটি সমস্ত বই ডাটাবেস থেকে ফেচ করবে এবং GUI-তে দেখাবে।

def display_books():
    book_listbox.delete(0, tk.END)
    cursor.execute("SELECT title, author, publisher, year FROM books")
    for row in cursor.fetchall():
        book_listbox.insert(tk.END, f"{row[0]} by {row[1]} - {row[2]} ({row[3]})")

Step 7: বই মুছে ফেলার ফাংশন

def delete_book():
    selected_book = book_listbox.curselection()
    if selected_book:
        book_info = book_listbox.get(selected_book).split(" by ")
        title = book_info[0]
        cursor.execute("DELETE FROM books WHERE title = ?", (title,))
        conn.commit()
        display_books()
        messagebox.showinfo("Success", "Book deleted successfully!")
    else:
        messagebox.showwarning("Warning", "Please select a book to delete.")

Step 8: Tkinter GUI উইজেট এবং বাটন তৈরি

# বই যোগ করার বাটন
add_button = tk.Button(root, text="Add Book", command=add_book, width=15)
add_button.grid(row=4, column=0, padx=10, pady=10)

# বই মুছে ফেলার বাটন
delete_button = tk.Button(root, text="Delete Book", command=delete_book, width=15)
delete_button.grid(row=4, column=1, padx=10, pady=10)

# বইয়ের তালিকা দেখানোর জন্য লিস্টবক্স
book_listbox = tk.Listbox(root, width=70, height=10)
book_listbox.grid(row=5, column=0, columnspan=2, padx=10, pady=10)

display_books()  # প্রাথমিকভাবে ডাটাবেসের বই লোড করা

Step 9: Tkinter মেইন লুপ চালানো

root.mainloop()
conn.close()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
import sqlite3

# ডাটাবেস তৈরি এবং টেবিল সেটআপ
conn = sqlite3.connect("books.db")
cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS books (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT NOT NULL,
        author TEXT NOT NULL,
        publisher TEXT,
        year INTEGER
    )
""")
conn.commit()

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Book Management System")
root.geometry("600x400")

# বইয়ের তথ্যের জন্য এন্ট্রি ফিল্ড
tk.Label(root, text="Title:").grid(row=0, column=0, padx=10, pady=5)
title_entry = tk.Entry(root, width=40)
title_entry.grid(row=0, column=1, padx=10, pady=5)

tk.Label(root, text="Author:").grid(row=1, column=0, padx=10, pady=5)
author_entry = tk.Entry(root, width=40)
author_entry.grid(row=1, column=1, padx=10, pady=5)

tk.Label(root, text="Publisher:").grid(row=2, column=0, padx=10, pady=5)
publisher_entry = tk.Entry(root, width=40)
publisher_entry.grid(row=2, column=1, padx=10, pady=5)

tk.Label(root, text="Year:").grid(row=3, column=0, padx=10, pady=5)
year_entry = tk.Entry(root, width=40)
year_entry.grid(row=3, column=1, padx=10, pady=5)

# বই যোগ করার ফাংশন
def add_book():
    title = title_entry.get()
    author = author_entry.get()
    publisher = publisher_entry.get()
    year = year_entry.get()

    if title and author:
        cursor.execute("INSERT INTO books (title, author, publisher, year) VALUES (?, ?, ?, ?)", (title, author, publisher, year))
        conn.commit()
        messagebox.showinfo("Success", "Book added successfully!")
        display_books()
        clear_entries()
    else:
        messagebox.showwarning("Warning", "Please enter both title and author.")

# এন্ট্রি ফিল্ড ক্লিয়ার করার ফাংশন
def clear_entries():
    title_entry.delete(0, tk.END)
    author_entry.delete(0, tk.END)
    publisher_entry.delete(0, tk.END)
    year_entry.delete(0, tk.END)

# বইয়ের তালিকা দেখানোর ফাংশন
def display_books():
    book_listbox.delete(0, tk.END)
    cursor.execute("SELECT title, author, publisher, year FROM books")
    for row in cursor.fetchall():
        book_listbox.insert(tk.END, f"{row[0]} by {row[1]} - {row[2]} ({row[3]})")

# বই মুছে ফেলার ফাংশন
def delete_book():
    selected_book = book_listbox.curselection()
    if selected_book:
        book_info = book_listbox.get(selected_book).split(" by ")
        title = book_info[0]
        cursor.execute("DELETE FROM books WHERE title = ?", (title,))
        conn.commit()
        display_books()
        messagebox.showinfo("Success", "Book deleted successfully!")
    else:
        messagebox.showwarning("Warning", "Please select a book to delete.")

# বই যোগ করার বাটন
add_button = tk.Button(root, text="Add Book", command=add_book, width=15)
add_button.grid(row=4, column=0, padx=10, pady=10)

# বই মুছে ফেলার বাটন
delete_button = tk.Button(root, text="Delete Book", command=delete_book, width=15)
delete_button.grid(row=4, column=1, padx=10, pady=10)

# বইয়ের তালিকা দেখানোর জন্য লিস্টবক্স
book_listbox = tk.Listbox(root, width=70, height=10)
book_listbox.grid(row=5, column=0, columnspan=2, padx=10, pady=10)

display_books()  # প্রাথমিকভাবে ডাটাবেসের বই লোড করা

root.mainloop()
conn.close()

কোড ব্যাখ্যা

SQLite Database: books.db নামে একটি SQLite ডাটাবেস তৈরি করা হয়েছে এবং books টেবিল তৈরি করা হয়েছে, যেখানে প্রতিটি বইয়ের শিরোনাম, লেখক, প্রকাশক এবং প্রকাশের বছর সংরক্ষণ করা হয়।

Tkinter GUI: Tkinter GUI তৈরি করা হয়েছে, যাতে ব্যবহারকারীরা বইয়ের শিরোনাম, লেখক, প্রকাশক এবং বছরের তথ্য ইনপুট দিতে পারেন।

add_book() Function: ইনপুট ফিল্ড থেকে ডেটা নিয়ে তা ডাটাবেসে সংরক্ষণ করে এবং GUI-তে প্রদর্শন করে।

display_books() Function: ডাটাবেস থেকে সমস্ত বইয়ের তথ্য সংগ্রহ করে GUI-তে প্রদর্শন করে।

delete_book() Function: নির্বাচিত বইটি ডাটাবেস থেকে মুছে ফেলে।


উপসংহার

এই বুক ম্যানেজমেন্ট সিস্টেম অ্যাপটি বিভিন্ন বই পরিচালনা করার জন্য একটি কার্যকরী টুল। SQLite ডাটাবেস ব্যবহার করে বইয়ের তথ্য সংরক্ষণ করা হয়েছে এবং Tkinter ব্যবহার করে GUI তৈরি করা হয়েছে।

Content added By

পোর্টফোলিও ওয়েবসাইট

914

পোর্টফোলিও ওয়েবসাইট হলো এমন একটি ওয়েবসাইট যা একজন ব্যক্তির কাজ, প্রকল্প, অভিজ্ঞতা এবং যোগাযোগের তথ্য প্রদর্শন করে। এটি সাধারণত একজন ফ্রিল্যান্সার, ডিজাইনার, ডেভেলপার, বা যেকোনো পেশাদারের জন্য নিজের দক্ষতা প্রদর্শনের জন্য ব্যবহৃত হয়।

Python-এর Django বা Flask ফ্রেমওয়ার্ক ব্যবহার করে সহজেই একটি পোর্টফোলিও ওয়েবসাইট তৈরি করা যায়। এখানে Django ব্যবহার করে একটি পোর্টফোলিও ওয়েবসাইট তৈরি করার জন্য একটি গাইড দেয়া হলো।


প্রয়োজনীয়তা

Python: Django ইন্সটল করতে হবে।

Django: Django ইনস্টল করতে টার্মিনালে নিচের কমান্ডটি দিন:

pip install django

পোর্টফোলিও ওয়েবসাইটের ফিচারস

  1. হোম পেজ: নিজের পরিচয়, অভিজ্ঞতা এবং সংক্ষিপ্ত বায়ো।
  2. প্রজেক্ট পেজ: সম্পন্ন প্রকল্পগুলোর তালিকা এবং তাদের বিবরণ।
  3. কাজের অভিজ্ঞতা: শিক্ষাগত যোগ্যতা এবং কাজের অভিজ্ঞতা।
  4. যোগাযোগ পেজ: যোগাযোগের জন্য ফর্ম ও সোশ্যাল মিডিয়া লিঙ্ক।

ধাপ ১: Django প্রজেক্ট তৈরি করা

প্রথমে টার্মিনালে নিচের কমান্ড চালান, যা আপনার Django প্রজেক্ট তৈরি করবে:

django-admin startproject portfolio_website
cd portfolio_website

ধাপ ২: Django অ্যাপ তৈরি করা

Django অ্যাপ তৈরি করতে নিম্নলিখিত কমান্ড চালান। এটি পোর্টফোলিও ওয়েবসাইটের অ্যাপ হিসেবে কাজ করবে।

python manage.py startapp portfolio

ধাপ ৩: অ্যাপটি প্রজেক্টে যুক্ত করা

প্রজেক্টের settings.py ফাইলে INSTALLED_APPS-এর মধ্যে portfolio অ্যাপটি যুক্ত করুন।

# portfolio_website/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'portfolio',  # Portfolio অ্যাপ যুক্ত করা
]

ধাপ ৪: মডেল তৈরি করা

এখানে প্রজেক্ট এবং কাজের অভিজ্ঞতার জন্য মডেল তৈরি করা হবে।

# portfolio/models.py
from django.db import models

class Project(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    image = models.ImageField(upload_to='project_images/')
    link = models.URLField(blank=True)

    def __str__(self):
        return self.title

class Experience(models.Model):
    title = models.CharField(max_length=100)
    company = models.CharField(max_length=100)
    description = models.TextField()
    start_date = models.DateField()
    end_date = models.DateField(blank=True, null=True)

    def __str__(self):
        return f"{self.title} at {self.company}"

ধাপ ৫: মাইগ্রেশন ফাইল তৈরি করা এবং ডাটাবেস আপডেট করা

মডেলগুলিকে ডাটাবেসে সেভ করার জন্য মাইগ্রেশন তৈরি করে নিচের কমান্ডগুলো চালান:

python manage.py makemigrations
python manage.py migrate

ধাপ ৬: অ্যাডমিন প্যানেলে মডেল রেজিস্টার করা

অ্যাডমিন প্যানেলে মডেলগুলো ব্যবস্থাপনার জন্য admin.py ফাইলে মডেল রেজিস্টার করুন।

# portfolio/admin.py
from django.contrib import admin
from .models import Project, Experience

admin.site.register(Project)
admin.site.register(Experience)

ধাপ ৭: ভিউ তৈরি করা

এখন views.py ফাইলে ভিউ তৈরি করা হবে যা হোম, প্রজেক্ট এবং অভিজ্ঞতা পৃষ্ঠাগুলির জন্য কাজ করবে।

# portfolio/views.py
from django.shortcuts import render
from .models import Project, Experience

def home(request):
    return render(request, 'portfolio/home.html')

def projects(request):
    projects = Project.objects.all()
    return render(request, 'portfolio/projects.html', {'projects': projects})

def experience(request):
    experiences = Experience.objects.all()
    return render(request, 'portfolio/experience.html', {'experiences': experiences})

ধাপ ৮: URL রাউটিং সেটআপ করা

প্রতিটি পেজের URL রাউটিং সেটআপ করুন।

# portfolio/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('projects/', views.projects, name='projects'),
    path('experience/', views.experience, name='experience'),
]

প্রজেক্টের মূল urls.py ফাইলে portfolio/urls.py যুক্ত করুন।

# portfolio_website/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('portfolio.urls')),  # Include portfolio app URLs
]

ধাপ ৯: টেমপ্লেট তৈরি করা

১. templates/portfolio/home.html

<!DOCTYPE html>
<html>
<head>
    <title>Home | Portfolio</title>
</head>
<body>
    <h1>Welcome to My Portfolio</h1>
    <p>Hello! I am a software developer with expertise in Python and Django.</p>
    <a href="{% url 'projects' %}">My Projects</a> | <a href="{% url 'experience' %}">My Experience</a>
</body>
</html>

২. templates/portfolio/projects.html

<!DOCTYPE html>
<html>
<head>
    <title>Projects | Portfolio</title>
</head>
<body>
    <h1>My Projects</h1>
    {% for project in projects %}
        <div>
            <h2>{{ project.title }}</h2>
            <p>{{ project.description }}</p>
            <img src="{{ project.image.url }}" alt="{{ project.title }}">
            {% if project.link %}
                <p><a href="{{ project.link }}">View Project</a></p>
            {% endif %}
        </div>
    {% endfor %}
</body>
</html>

৩. templates/portfolio/experience.html

<!DOCTYPE html>
<html>
<head>
    <title>Experience | Portfolio</title>
</head>
<body>
    <h1>My Experience</h1>
    {% for experience in experiences %}
        <div>
            <h2>{{ experience.title }} at {{ experience.company }}</h2>
            <p>{{ experience.description }}</p>
            <p>From: {{ experience.start_date }} - To: {{ experience.end_date|default:"Present" }}</p>
        </div>
    {% endfor %}
</body>
</html>

ধাপ ১০: মিডিয়া ফাইল সেটআপ করা

settings.py ফাইলে মিডিয়া ফাইল সেটআপ করুন:

# portfolio_website/settings.py
import os

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py ফাইলে মিডিয়া ফাইল হ্যান্ডল করার জন্য নিম্নোক্ত কোড যোগ করুন:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... other URL patterns ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

ধাপ ১১: অ্যাডমিন প্যানেলে ডেটা এন্ট্রি করা

এখন python manage.py runserver চালান এবং ব্রাউজারে http://127.0.0.1:8000/admin/ এ গিয়ে প্রজেক্ট এবং অভিজ্ঞতার ডেটা এন্ট্রি করুন।


ধাপ ১২: ওয়েবসাইট চালানো

ওয়েবসাইটটি চালাতে টার্মিনালে কমান্ড দিন:

python manage.py runserver

এরপর ব্রাউজারে http://127.0.0.1:8000/ URL-এ গিয়ে আপনার তৈরি করা পোর্টফোলিও ওয়েবসাইটটি দেখুন।


উপসংহার

এই পোর্টফোলিও ওয়েবসাইটটি Django ফ্রেমওয়ার্ক ব্যবহার করে সহজে তৈরি করা সম্ভব। চাইলে এই ওয়েবসাইটে আরও অনেক ফিচার যেমন ব্লগ পেজ, রিভিউ সেকশন বা আরও বিস্তারিত সেকশন যোগ করা যায়। এটি আপনার কাজ এবং দক্ষতা প্রদর্শনের জন্য একটি কার্যকরী টুল হিসেবে কাজ করবে।

Content added By

চ্যাট অ্যাপ্লিকেশন

282

চ্যাট অ্যাপ্লিকেশন হলো এমন একটি অ্যাপ্লিকেশন যা ব্যবহারকারীদের রিয়েল-টাইমে বার্তা আদান-প্রদানের সুযোগ দেয়। একটি সহজ চ্যাট অ্যাপ্লিকেশন তৈরি করতে আমরা Python-এর Socket এবং Tkinter ব্যবহার করতে পারি। এখানে Socket প্রোগ্রামিং ব্যবহার করে সার্ভার এবং ক্লায়েন্টের মধ্যে বার্তা আদান-প্রদান করা হবে, এবং Tkinter ব্যবহার করে একটি গ্রাফিক্যাল ইন্টারফেস তৈরি করা হবে।


প্রজেক্ট: চ্যাট অ্যাপ্লিকেশন

ফিচারস

  1. রিয়েল-টাইম চ্যাট: একাধিক ক্লায়েন্ট একসাথে চ্যাট করতে পারবে।
  2. সার্ভার এবং ক্লায়েন্ট: সার্ভার একাধিক ক্লায়েন্টের সাথে সংযুক্ত থাকবে এবং বার্তা আদান-প্রদান পরিচালনা করবে।
  3. Tkinter GUI: বার্তা পাঠানোর জন্য সহজ একটি GUI ইন্টারফেস।

প্রয়োজনীয় লাইব্রেরি

  • socket: নেটওয়ার্ক প্রোগ্রামিংয়ের জন্য।
  • threading: একাধিক থ্রেড চালানোর জন্য (প্রতি ক্লায়েন্টের জন্য আলাদা থ্রেড)।
  • tkinter: গ্রাফিক্যাল ইন্টারফেস তৈরি করতে।

Python-এ socket, threading, এবং tkinter লাইব্রেরিগুলি বিল্ট-ইন, তাই এগুলো আলাদা করে ইন্সটল করার প্রয়োজন নেই।


ধাপ ১: সার্ভার কোড তৈরি করা

প্রথমে একটি সার্ভার তৈরি করতে হবে, যা ক্লায়েন্টদের সংযোগ গ্রহণ করবে এবং বার্তা প্রেরণ করবে।

# server.py
import socket
import threading

# সার্ভার সেটআপ
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 5500))
server.listen()

clients = []
nicknames = []

# বার্তা প্রেরণ করা
def broadcast(message):
    for client in clients:
        client.send(message)

# ক্লায়েন্ট পরিচালনার জন্য ফাংশন
def handle_client(client):
    while True:
        try:
            message = client.recv(1024)
            broadcast(message)
        except:
            index = clients.index(client)
            clients.remove(client)
            client.close()
            nickname = nicknames[index]
            broadcast(f'{nickname} left the chat.'.encode('utf-8'))
            nicknames.remove(nickname)
            break

# সার্ভারের মূল ফাংশন
def receive():
    while True:
        client, address = server.accept()
        print(f'Connected with {str(address)}')

        client.send('NICK'.encode('utf-8'))
        nickname = client.recv(1024).decode('utf-8')
        nicknames.append(nickname)
        clients.append(client)

        print(f'Nickname is {nickname}')
        broadcast(f'{nickname} joined the chat!'.encode('utf-8'))
        client.send('Connected to the server!'.encode('utf-8'))

        thread = threading.Thread(target=handle_client, args=(client,))
        thread.start()

print('Server is running...')
receive()

ধাপ ২: ক্লায়েন্ট কোড তৈরি করা

ক্লায়েন্ট সাইড থেকে বার্তা পাঠানোর জন্য GUI সহ একটি অ্যাপ তৈরি করা হবে।

# client.py
import socket
import threading
import tkinter as tk
from tkinter import scrolledtext
from tkinter import messagebox

nickname = input("Choose a nickname: ")

# ক্লায়েন্ট সেটআপ
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 5500))

# GUI সেটআপ
root = tk.Tk()
root.title("Chat Application")

chat_label = tk.Label(root, text="Chat:")
chat_label.pack()

chat_area = scrolledtext.ScrolledText(root)
chat_area.pack(padx=20, pady=5)
chat_area.config(state='disabled')

message_label = tk.Label(root, text="Message:")
message_label.pack()

message_entry = tk.Entry(root, width=50)
message_entry.pack(padx=20, pady=5)

def send_message():
    message = f'{nickname}: {message_entry.get()}'
    client.send(message.encode('utf-8'))
    message_entry.delete(0, tk.END)

send_button = tk.Button(root, text="Send", command=send_message)
send_button.pack(pady=5)

def receive_messages():
    while True:
        try:
            message = client.recv(1024).decode('utf-8')
            chat_area.config(state='normal')
            chat_area.insert('end', message + '\n')
            chat_area.yview('end')
            chat_area.config(state='disabled')
        except:
            print("An error occurred!")
            client.close()
            break

receive_thread = threading.Thread(target=receive_messages)
receive_thread.start()

root.mainloop()

কোড ব্যাখ্যা

সার্ভার কোড (server.py):

  1. সার্ভার সেটআপ: socket ব্যবহার করে সার্ভার শুরু করা হয়েছে এবং ক্লায়েন্ট সংযোগের জন্য bind()listen() ব্যবহার করা হয়েছে।
  2. broadcast() ফাংশন: এই ফাংশনটি প্রতিটি ক্লায়েন্টকে বার্তা প্রেরণ করে।
  3. handle_client() ফাংশন: প্রতিটি ক্লায়েন্টের জন্য আলাদা থ্রেড তৈরি করা হয় এবং এটি প্রতিটি ক্লায়েন্টের বার্তা গ্রহণ করে।
  4. receive() ফাংশন: সার্ভার প্রতিটি নতুন ক্লায়েন্টের সংযোগ গ্রহণ করে এবং একটি থ্রেড তৈরি করে, যা তাদের বার্তা প্রেরণ ও গ্রহণ করে।

ক্লায়েন্ট কোড (client.py):

  1. ক্লায়েন্ট সেটআপ: socket ব্যবহার করে ক্লায়েন্ট সার্ভারের সাথে সংযোগ স্থাপন করে।
  2. Tkinter GUI: একটি চ্যাট ইন্টারফেস তৈরি করা হয়েছে যেখানে ব্যবহারকারী বার্তা পাঠাতে ও দেখতে পারবেন।
  3. send_message() ফাংশন: ব্যবহারকারীর ইনপুট গ্রহণ করে তা সার্ভারে প্রেরণ করে।
  4. receive_messages() ফাংশন: এই ফাংশনটি আলাদা একটি থ্রেডে চলবে এবং সার্ভার থেকে বার্তা গ্রহণ করে GUI-তে দেখাবে।

ধাপ ৩: অ্যাপ্লিকেশন চালানো

প্রথমে সার্ভার চালু করুন:

python server.py

তারপর একাধিক ক্লায়েন্ট চালাতে পারেন:

python client.py

উপসংহার

এই চ্যাট অ্যাপ্লিকেশনটি একটি মজাদার ও কার্যকরী প্রজেক্ট। এর মাধ্যমে Socket প্রোগ্রামিং এবং Tkinter এর ব্যবহার বোঝা যায়। অ্যাপটিতে আরও উন্নত ফিচার যোগ করা যেতে পারে যেমন:

  • প্রাইভেট চ্যাট: নির্দিষ্ট ক্লায়েন্টদের সাথে প্রাইভেট চ্যাটের সুবিধা।
  • ইমোজি সাপোর্ট: বার্তায় ইমোজি যোগ করার অপশন।
  • ফাইল শেয়ারিং: চ্যাটের মাধ্যমে ফাইল শেয়ার করার সুবিধা।

এই প্রজেক্টটি নেটওয়ার্কিং এবং GUI প্রোগ্রামিংয়ে দক্ষতা বৃদ্ধিতে সহায়ক।

Content added By

ব্লগ প্ল্যাটফর্ম

263

ব্লগ প্ল্যাটফর্ম হলো এমন একটি ওয়েবসাইট যেখানে ব্যবহারকারীরা ব্লগ পোস্ট তৈরি, সম্পাদনা এবং মুছে ফেলতে পারে। Django ফ্রেমওয়ার্ক ব্যবহার করে একটি সাধারণ ব্লগ প্ল্যাটফর্ম তৈরি করা যায়। এখানে আমরা একটি ব্লগ প্ল্যাটফর্ম তৈরি করব যেখানে ব্যবহারকারীরা ব্লগ পোস্ট তৈরি করতে পারবেন, সেই পোস্টে মন্তব্য করতে পারবেন এবং পোস্টগুলো প্রদর্শন করতে পারবেন।


প্রয়োজনীয়তা

Python এবং Django

Django ইনস্টল করতে টার্মিনালে এই কমান্ডটি চালান:

pip install django

ব্লগ প্ল্যাটফর্মের ফিচারস

  1. হোম পেজ: সকল পোস্টের তালিকা দেখাবে।
  2. পোস্টের বিস্তারিত: প্রতিটি পোস্টের বিস্তারিত দেখাবে এবং মন্তব্য করার অপশন থাকবে।
  3. নতুন পোস্ট তৈরি: নতুন ব্লগ পোস্ট তৈরি করার জন্য ফর্ম।
  4. পোস্ট এডিট এবং ডিলিট: পোস্ট সম্পাদনা ও মুছে ফেলার অপশন।
  5. মন্তব্য: প্রতিটি পোস্টে মন্তব্য করার অপশন।

ধাপ ১: Django প্রজেক্ট এবং অ্যাপ তৈরি করা

প্রথমে Django প্রজেক্ট তৈরি করুন এবং একটি blog অ্যাপ তৈরি করুন।

django-admin startproject blog_platform
cd blog_platform
python manage.py startapp blog

ধাপ ২: অ্যাপটি প্রজেক্টে যুক্ত করা

প্রজেক্টের settings.py ফাইলে INSTALLED_APPS-এর মধ্যে blog অ্যাপটি যুক্ত করুন।

# blog_platform/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # Blog অ্যাপ যুক্ত করা
]

ধাপ ৩: মডেল তৈরি করা

Blog মডেল এবং Comment মডেল তৈরি করতে হবে যা ব্লগ পোস্ট এবং মন্তব্য সংরক্ষণ করবে।

# blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
    author = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f"Comment by {self.author} on {self.post}"

ধাপ ৪: মাইগ্রেশন ফাইল তৈরি করা এবং ডাটাবেস আপডেট করা

মডেলগুলিকে ডাটাবেসে সেভ করার জন্য মাইগ্রেশন তৈরি করে নিম্নোক্ত কমান্ডগুলো চালান:

python manage.py makemigrations
python manage.py migrate

ধাপ ৫: অ্যাডমিন প্যানেলে মডেল রেজিস্টার করা

অ্যাডমিন প্যানেলে মডেলগুলো ব্যবস্থাপনার জন্য admin.py ফাইলে মডেল রেজিস্টার করুন।

# blog/admin.py
from django.contrib import admin
from .models import Post, Comment

admin.site.register(Post)
admin.site.register(Comment)

ধাপ ৬: ভিউ তৈরি করা

views.py ফাইলে ভিউ তৈরি করুন যা হোম পেজ, পোস্টের বিস্তারিত এবং মন্তব্যের জন্য কাজ করবে।

# blog/views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Post, Comment
from django.contrib.auth.decorators import login_required
from .forms import PostForm, CommentForm

def home(request):
    posts = Post.objects.all()
    return render(request, 'blog/home.html', {'posts': posts})

def post_detail(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    comments = post.comments.all()

    if request.method == "POST":
        comment_form = CommentForm(request.POST)
        if comment_form.is_valid():
            comment = comment_form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('post_detail', post_id=post.id)
    else:
        comment_form = CommentForm()

    return render(request, 'blog/post_detail.html', {'post': post, 'comments': comments, 'comment_form': comment_form})

@login_required
def post_create(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('home')
    else:
        form = PostForm()
    return render(request, 'blog/post_form.html', {'form': form})

ধাপ ৭: ফর্ম তৈরি করা

forms.py ফাইলে পোস্ট এবং মন্তব্য করার জন্য ফর্ম তৈরি করুন।

# blog/forms.py
from django import forms
from .models import Post, Comment

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['author', 'content']

ধাপ ৮: URL রাউটিং সেটআপ করা

প্রতিটি পেজের URL রাউটিং সেটআপ করুন।

# blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('post/<int:post_id>/', views.post_detail, name='post_detail'),
    path('post/new/', views.post_create, name='post_create'),
]

প্রজেক্টের মূল urls.py ফাইলে blog/urls.py যুক্ত করুন।

# blog_platform/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),  # Blog app URLs
]

ধাপ ৯: টেমপ্লেট তৈরি করা

১. templates/blog/home.html

<!DOCTYPE html>
<html>
<head>
    <title>Blog Home</title>
</head>
<body>
    <h1>Blog Home</h1>
    <a href="{% url 'post_create' %}">Create New Post</a>
    <hr>
    {% for post in posts %}
        <h2><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></h2>
        <p>{{ post.content|slice:":100" }}...</p>
        <small>Posted by {{ post.author }} on {{ post.date_posted }}</small>
        <hr>
    {% endfor %}
</body>
</html>

২. templates/blog/post_detail.html

<!DOCTYPE html>
<html>
<head>
    <title>{{ post.title }}</title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p>{{ post.content }}</p>
    <small>Posted by {{ post.author }} on {{ post.date_posted }}</small>
    <hr>
    <h2>Comments</h2>
    {% for comment in comments %}
        <p><strong>{{ comment.author }}</strong>: {{ comment.content }}</p>
    {% empty %}
        <p>No comments yet.</p>
    {% endfor %}
    <hr>
    <h3>Leave a Comment</h3>
    <form method="post">
        {% csrf_token %}
        {{ comment_form.as_p }}
        <button type="submit">Submit</button>
    </form>
    <hr>
    <a href="{% url 'home' %}">Back to Home</a>
</body>
</html>

৩. templates/blog/post_form.html

<!DOCTYPE html>
<html>
<head>
    <title>Create New Post</title>
</head>
<body>
    <h1>Create New Post</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save</button>
    </form>
</body>
</html>

ধাপ ১০: অ্যাপ্লিকেশন চালানো

অ্যাপ্লিকেশনটি চালাতে টার্মিনালে নিচের কমান্ড দিন:

python manage.py runserver

এরপর ব্রাউজারে http://127.0.0.1:8000/ এ গিয়ে ব্লগ প্ল্যাটফর্মটি দেখুন।


উপসংহার

এই ব্লগ প্ল্যাটফর্মে ব্যবহারকারীরা পোস্ট তৈরি করতে, সম্পাদনা করতে এবং মন্তব্য করতে পারবেন। Django দিয়ে আরও ফিচার যোগ করা সম্ভব যেমন:

  • ইউজার রেজিস্ট্রেশন ও লগইন সিস্টেম
  • লাইক ও কমেন্ট ফিচার
  • ক্যাটাগরি ও ট্যাগ ব্যবহার

এই প্রজেক্টটি Django-তে ওয়েব ডেভেলপমেন্ট শেখার জন্য একটি চমৎকার উদাহরণ।

Content added By

ইনভেন্টরি ম্যানেজমেন্ট সিস্টেম

368

ইনভেন্টরি ম্যানেজমেন্ট সিস্টেম হলো একটি অ্যাপ্লিকেশন যা পণ্য ও স্টকের তথ্য সংরক্ষণ, আপডেট এবং পরিচালনা করতে সাহায্য করে। Python Django ফ্রেমওয়ার্ক এবং SQLite ডাটাবেস ব্যবহার করে এই সিস্টেমটি তৈরি করা যায়।


প্রয়োজনীয়তা

Python এবং Django

Django ইন্সটল করতে টার্মিনালে এই কমান্ডটি চালান:

pip install django

ইনভেন্টরি ম্যানেজমেন্ট সিস্টেমের ফিচারস

  1. হোম পেজ: সকল পণ্যের তালিকা দেখাবে।
  2. পণ্য যোগ করা: নতুন পণ্য যোগ করার জন্য একটি ফর্ম।
  3. পণ্য আপডেট: পণ্যের তথ্য ও স্টক আপডেট করা।
  4. পণ্য মুছে ফেলা: পণ্য ডিলিট করার অপশন।
  5. স্টক পর্যবেক্ষণ: মজুত পণ্যের পরিমাণ পর্যবেক্ষণ।

ধাপ ১: Django প্রজেক্ট এবং অ্যাপ তৈরি করা

প্রথমে Django প্রজেক্ট তৈরি করুন এবং একটি inventory নামে অ্যাপ তৈরি করুন।

django-admin startproject inventory_management
cd inventory_management
python manage.py startapp inventory

ধাপ ২: অ্যাপটি প্রজেক্টে যুক্ত করা

প্রজেক্টের settings.py ফাইলে INSTALLED_APPS এর মধ্যে inventory অ্যাপটি যুক্ত করুন।

# inventory_management/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'inventory',  # Inventory অ্যাপ যুক্ত করা
]

ধাপ ৩: মডেল তৈরি করা

Product মডেল তৈরি করতে হবে যেখানে প্রতিটি পণ্যের নাম, বিবরণ, পরিমাণ এবং দাম সংরক্ষণ করা হবে।

# inventory/models.py
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    quantity = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return self.name

ধাপ ৪: মাইগ্রেশন ফাইল তৈরি করা এবং ডাটাবেস আপডেট করা

মডেলকে ডাটাবেসে সেভ করার জন্য মাইগ্রেশন তৈরি করে নিম্নোক্ত কমান্ডগুলো চালান:

python manage.py makemigrations
python manage.py migrate

ধাপ ৫: অ্যাডমিন প্যানেলে মডেল রেজিস্টার করা

অ্যাডমিন প্যানেলে মডেল ব্যবস্থাপনার জন্য admin.py ফাইলে মডেল রেজিস্টার করুন।

# inventory/admin.py
from django.contrib import admin
from .models import Product

admin.site.register(Product)

ধাপ ৬: ভিউ তৈরি করা

views.py ফাইলে পণ্য তালিকা, নতুন পণ্য যোগ, পণ্য সম্পাদনা, এবং মুছে ফেলার ভিউ তৈরি করুন।

# inventory/views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Product
from .forms import ProductForm

def product_list(request):
    products = Product.objects.all()
    return render(request, 'inventory/product_list.html', {'products': products})

def add_product(request):
    if request.method == 'POST':
        form = ProductForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('product_list')
    else:
        form = ProductForm()
    return render(request, 'inventory/product_form.html', {'form': form})

def update_product(request, pk):
    product = get_object_or_404(Product, pk=pk)
    if request.method == 'POST':
        form = ProductForm(request.POST, instance=product)
        if form.is_valid():
            form.save()
            return redirect('product_list')
    else:
        form = ProductForm(instance=product)
    return render(request, 'inventory/product_form.html', {'form': form})

def delete_product(request, pk):
    product = get_object_or_404(Product, pk=pk)
    if request.method == 'POST':
        product.delete()
        return redirect('product_list')
    return render(request, 'inventory/product_confirm_delete.html', {'product': product})

ধাপ ৭: ফর্ম তৈরি করা

forms.py ফাইলে ProductForm তৈরি করুন যা পণ্য যোগ ও সম্পাদনার জন্য ব্যবহৃত হবে।

# inventory/forms.py
from django import forms
from .models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ['name', 'description', 'quantity', 'price']

ধাপ ৮: URL রাউটিং সেটআপ করা

প্রতিটি পেজের URL রাউটিং সেটআপ করুন।

# inventory/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.product_list, name='product_list'),
    path('add/', views.add_product, name='add_product'),
    path('update/<int:pk>/', views.update_product, name='update_product'),
    path('delete/<int:pk>/', views.delete_product, name='delete_product'),
]

প্রজেক্টের মূল urls.py ফাইলে inventory/urls.py যুক্ত করুন।

# inventory_management/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('inventory.urls')),  # Inventory app URLs
]

ধাপ ৯: টেমপ্লেট তৈরি করা

১. templates/inventory/product_list.html

<!DOCTYPE html>
<html>
<head>
    <title>Inventory</title>
</head>
<body>
    <h1>Product Inventory</h1>
    <a href="{% url 'add_product' %}">Add New Product</a>
    <table border="1">
        <tr>
            <th>Name</th>
            <th>Description</th>
            <th>Quantity</th>
            <th>Price</th>
            <th>Actions</th>
        </tr>
        {% for product in products %}
        <tr>
            <td>{{ product.name }}</td>
            <td>{{ product.description }}</td>
            <td>{{ product.quantity }}</td>
            <td>${{ product.price }}</td>
            <td>
                <a href="{% url 'update_product' product.pk %}">Edit</a> |
                <a href="{% url 'delete_product' product.pk %}">Delete</a>
            </td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

২. templates/inventory/product_form.html

<!DOCTYPE html>
<html>
<head>
    <title>Add/Update Product</title>
</head>
<body>
    <h1>{% if form.instance.pk %}Update{% else %}Add{% endif %} Product</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save</button>
    </form>
</body>
</html>

৩. templates/inventory/product_confirm_delete.html

<!DOCTYPE html>
<html>
<head>
    <title>Delete Product</title>
</head>
<body>
    <h1>Are you sure you want to delete {{ product.name }}?</h1>
    <form method="post">
        {% csrf_token %}
        <button type="submit">Yes, Delete</button>
        <a href="{% url 'product_list' %}">Cancel</a>
    </form>
</body>
</html>

ধাপ ১০: অ্যাপ্লিকেশন চালানো

অ্যাপ্লিকেশনটি চালাতে টার্মিনালে নিচের কমান্ড দিন:

python manage.py runserver

এরপর ব্রাউজারে http://127.0.0.1:8000/ এ গিয়ে ইনভেন্টরি ম্যানেজমেন্ট সিস্টেমটি দেখুন।


উপসংহার

এই ইনভেন্টরি ম্যানেজমেন্ট সিস্টেমে ব্যবহারকারীরা পণ্য যোগ করতে, সম্পাদনা করতে এবং মুছে ফেলতে পারবেন। Django দিয়ে আরও ফিচার যোগ করা সম্ভব, যেমন:

  • ইউজার রোলস এবং পারমিশন
  • স্টক রিপোর্ট জেনারেশন
  • বারকোড বা QR কোড সমর্থন

এই প্রজেক্টটি Django-তে ওয়েব ডেভেলপমেন্ট শেখার জন্য একটি চমৎকার উদাহরণ।

Content added By

পাইথন স্ক্রিপ্টস সংগ্রহ (Automation Scripts)

369

Python ব্যবহার করে স্বয়ংক্রিয় বিভিন্ন কাজ সহজেই করা যায়। এখানে কিছু Python অটোমেশন স্ক্রিপ্ট এর উদাহরণ দেয়া হলো, যা দৈনন্দিন কাজগুলোকে দ্রুত ও কার্যকরীভাবে সম্পন্ন করতে সাহায্য করবে।


১. ফাইল অর্গানাইজার

এই স্ক্রিপ্টটি একটি নির্দিষ্ট ফোল্ডারের ফাইলগুলোকে ফাইল টাইপের ভিত্তিতে আলাদা ফোল্ডারে সরিয়ে রাখে।

import os
import shutil

def organize_files(folder_path):
    for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)
        if os.path.isfile(file_path):
            file_extension = file_name.split('.')[-1]
            target_folder = os.path.join(folder_path, file_extension)

            if not os.path.exists(target_folder):
                os.makedirs(target_folder)
            
            shutil.move(file_path, target_folder)

organize_files('/path/to/your/folder')

২. ইমেজ রিসাইজার

এই স্ক্রিপ্টটি একটি ফোল্ডারের সমস্ত ইমেজকে নির্দিষ্ট রেজোলিউশনে রিসাইজ করে সংরক্ষণ করবে।

from PIL import Image
import os

def resize_images(folder_path, size=(800, 800)):
    for file_name in os.listdir(folder_path):
        if file_name.endswith(('jpg', 'jpeg', 'png')):
            img_path = os.path.join(folder_path, file_name)
            img = Image.open(img_path)
            img = img.resize(size)
            img.save(img_path)

resize_images('/path/to/image/folder', size=(800, 800))

৩. ওয়েব স্ক্র্যাপার (নিউজ হেডলাইন সংগ্রহ)

এই স্ক্রিপ্টটি নির্দিষ্ট নিউজ ওয়েবসাইট থেকে সংবাদ শিরোনাম স্ক্র্যাপ করে।

import requests
from bs4 import BeautifulSoup

def get_news_headlines(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    headlines = soup.find_all('h3')  # assuming headlines are in <h3> tags

    for headline in headlines:
        print(headline.get_text(strip=True))

get_news_headlines('https://www.bbc.com/news')

৪. ইমেল স্বয়ংক্রিয় প্রেরণ

Python দিয়ে স্বয়ংক্রিয়ভাবে ইমেল প্রেরণ করতে SMTP ব্যবহার করা যায়।

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email(sender, password, recipient, subject, message):
    msg = MIMEMultipart()
    msg['From'] = sender
    msg['To'] = recipient
    msg['Subject'] = subject

    msg.attach(MIMEText(message, 'plain'))

    try:
        with smtplib.SMTP('smtp.gmail.com', 587) as server:
            server.starttls()
            server.login(sender, password)
            server.send_message(msg)
            print("Email sent successfully!")
    except Exception as e:
        print(f"Failed to send email: {e}")

send_email('your_email@gmail.com', 'your_password', 'recipient_email@gmail.com', 'Subject', 'Hello, this is an automated email.')

৫. পিডিএফ মার্জার

একাধিক পিডিএফ ফাইলকে একটি পিডিএফ ফাইলে মার্জ করতে এই স্ক্রিপ্টটি ব্যবহার করা যায়।

from PyPDF2 import PdfMerger

def merge_pdfs(pdf_list, output_file):
    merger = PdfMerger()
    for pdf in pdf_list:
        merger.append(pdf)
    merger.write(output_file)
    merger.close()

pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
merge_pdfs(pdf_files, 'merged_output.pdf')

৬. ওয়েবসাইট মনিটরিং স্ক্রিপ্ট

ওয়েবসাইটের স্ট্যাটাস মনিটর করতে এই স্ক্রিপ্টটি ব্যবহার করা যায়।

import requests
import time

def monitor_website(url, interval=60):
    while True:
        try:
            response = requests.get(url)
            if response.status_code == 200:
                print(f"{url} is UP")
            else:
                print(f"{url} is DOWN with status code: {response.status_code}")
        except requests.exceptions.RequestException as e:
            print(f"{url} is DOWN: {e}")
        time.sleep(interval)

monitor_website('https://www.google.com', interval=300)  # 5 minutes interval

৭. ফোল্ডারে খালি ফাইল খোঁজার স্ক্রিপ্ট

একটি নির্দিষ্ট ফোল্ডারে খালি ফাইল খুঁজে বের করতে এই স্ক্রিপ্টটি ব্যবহার করা যেতে পারে।

import os

def find_empty_files(folder_path):
    empty_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            if os.path.getsize(file_path) == 0:
                empty_files.append(file_path)
    return empty_files

empty_files = find_empty_files('/path/to/folder')
print("Empty files:", empty_files)

৮. টেক্সট থেকে স্পিচে কনভার্টার

Python-এর pyttsx3 লাইব্রেরি ব্যবহার করে টেক্সট থেকে স্পিচে রূপান্তর করা যায়।

import pyttsx3

def text_to_speech(text):
    engine = pyttsx3.init()
    engine.say(text)
    engine.runAndWait()

text_to_speech("Hello, this is a text to speech example.")

pyttsx3 লাইব্রেরি ইনস্টল করতে:

pip install pyttsx3

৯. ডুপ্লিকেট ফাইল খুঁজে বের করার স্ক্রিপ্ট

এই স্ক্রিপ্টটি ফোল্ডারে থাকা ডুপ্লিকেট ফাইল চিহ্নিত করতে সাহায্য করবে।

import os
import hashlib

def hash_file(file_path):
    hasher = hashlib.md5()
    with open(file_path, 'rb') as file:
        buf = file.read()
        hasher.update(buf)
    return hasher.hexdigest()

def find_duplicates(folder_path):
    hashes = {}
    duplicates = []

    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            file_hash = hash_file(file_path)
            if file_hash in hashes:
                duplicates.append(file_path)
            else:
                hashes[file_hash] = file_path

    return duplicates

duplicates = find_duplicates('/path/to/folder')
print("Duplicate files:", duplicates)

১০. ইউটিউব ভিডিও ডাউনলোডার

Python এর pytube লাইব্রেরি ব্যবহার করে ইউটিউব থেকে ভিডিও ডাউনলোড করা যায়।\

from pytube import YouTube

def download_youtube_video(video_url, path):
    yt = YouTube(video_url)
    ys = yt.streams.get_highest_resolution()
    ys.download(path)
    print(f"Downloaded: {yt.title}")

download_youtube_video('https://www.youtube.com/watch?v=dQw4w9WgXcQ', '/path/to/download/folder')

pytube লাইব্রেরি ইনস্টল করতে:

pip install pytube

উপসংহার

এই স্ক্রিপ্টগুলো দৈনন্দিন কাজগুলিকে সহজে, দ্রুত এবং কার্যকরীভাবে সম্পন্ন করতে সাহায্য করবে। এগুলো ব্যবহার করে আপনি নিজে থেকে বিভিন্ন ধরণের অ্যাপ্লিকেশন এবং অটোমেশন টুল তৈরি করতে পারেন। চাইলে এই স্ক্রিপ্টগুলিতে আরও ফিচার যুক্ত করে বিভিন্ন ধরনের কাজ আরও সহজ করতে পারেন।

Content added By

রেগুলার এক্সপ্রেশন টেস্টার

266

রেগুলার এক্সপ্রেশন টেস্টার একটি টুল যা ব্যবহারকারীদের নির্দিষ্ট রেগুলার এক্সপ্রেশন দিয়ে টেক্সট প্যাটার্ন ম্যাচ করার জন্য সহজে পরীক্ষা করার সুযোগ দেয়। Python এবং Tkinter ব্যবহার করে আমরা সহজেই একটি GUI ভিত্তিক রেগুলার এক্সপ্রেশন টেস্টার তৈরি করতে পারি।


প্রজেক্ট: রেগুলার এক্সপ্রেশন টেস্টার

ফিচারস

  1. রেগুলার এক্সপ্রেশন ইনপুট: ব্যবহারকারী তাদের রেগুলার এক্সপ্রেশন ইনপুট দিতে পারবেন।
  2. টেক্সট ইনপুট: ব্যবহারকারী টেক্সট ইনপুট দিতে পারবেন, যেখানে প্যাটার্ন পরীক্ষা করা হবে।
  3. ম্যাচ ফলাফল দেখানো: ম্যাচের ফলাফল দেখানো এবং ম্যাচগুলির তালিকা প্রদর্শন করা।
  4. ইরর হ্যান্ডলিং: ভুল রেগুলার এক্সপ্রেশন ইনপুট দিলে এরর মেসেজ প্রদর্শন করা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • re: রেগুলার এক্সপ্রেশন মডিউল যা Python-এ বিল্ট-ইন।

Python-এ tkinter এবং re লাইব্রেরি বিল্ট-ইন থাকে, তাই আলাদা করে ইনস্টলেশনের প্রয়োজন নেই।


ধাপ ১: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
import re

ধাপ ২: Tkinter GUI সেটআপ করা

Tkinter GUI তৈরি করে ব্যবহারকারীর রেগুলার এক্সপ্রেশন এবং টেক্সট ইনপুট দেয়ার ব্যবস্থা করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Regular Expression Tester")
root.geometry("600x400")

# রেগুলার এক্সপ্রেশন লেবেল এবং এন্ট্রি ফিল্ড
tk.Label(root, text="Regular Expression:", font=("Arial", 12)).pack(pady=5)
regex_entry = tk.Entry(root, font=("Arial", 12), width=50)
regex_entry.pack(pady=5)

# টেক্সট লেবেল এবং টেক্সট বক্স
tk.Label(root, text="Text to Test:", font=("Arial", 12)).pack(pady=5)
text_entry = tk.Text(root, font=("Arial", 12), width=50, height=10)
text_entry.pack(pady=5)

ধাপ ৩: রেগুলার এক্সপ্রেশন ম্যাচিং ফাংশন তৈরি করা

এই ফাংশনটি ইনপুট রেগুলার এক্সপ্রেশন এবং টেক্সট ব্যবহার করে ম্যাচ পরীক্ষা করবে।

def test_regex():
    regex = regex_entry.get()
    text = text_entry.get("1.0", tk.END)

    try:
        pattern = re.compile(regex)
        matches = pattern.findall(text)

        if matches:
            result = "Matches found:\n" + "\n".join(matches)
        else:
            result = "No matches found."
        
        result_label.config(text=result)
    except re.error as e:
        messagebox.showerror("Error", f"Invalid regular expression: {e}")

ধাপ ৪: Tkinter উইজেট এবং বাটন তৈরি করা

Tkinter GUI তে রেগুলার এক্সপ্রেশন টেস্ট করার জন্য বাটন এবং ফলাফল দেখানোর জন্য একটি লেবেল তৈরি করা হবে।

# টেস্ট বাটন
test_button = tk.Button(root, text="Test", command=test_regex, font=("Arial", 12))
test_button.pack(pady=10)

# ফলাফল দেখানোর জন্য লেবেল
result_label = tk.Label(root, text="", font=("Arial", 12), justify="left")
result_label.pack(pady=10)

ধাপ ৫: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
import re

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Regular Expression Tester")
root.geometry("600x400")

# রেগুলার এক্সপ্রেশন লেবেল এবং এন্ট্রি ফিল্ড
tk.Label(root, text="Regular Expression:", font=("Arial", 12)).pack(pady=5)
regex_entry = tk.Entry(root, font=("Arial", 12), width=50)
regex_entry.pack(pady=5)

# টেক্সট লেবেল এবং টেক্সট বক্স
tk.Label(root, text="Text to Test:", font=("Arial", 12)).pack(pady=5)
text_entry = tk.Text(root, font=("Arial", 12), width=50, height=10)
text_entry.pack(pady=5)

# রেগুলার এক্সপ্রেশন ম্যাচিং ফাংশন
def test_regex():
    regex = regex_entry.get()
    text = text_entry.get("1.0", tk.END)

    try:
        pattern = re.compile(regex)
        matches = pattern.findall(text)

        if matches:
            result = "Matches found:\n" + "\n".join(matches)
        else:
            result = "No matches found."
        
        result_label.config(text=result)
    except re.error as e:
        messagebox.showerror("Error", f"Invalid regular expression: {e}")

# টেস্ট বাটন
test_button = tk.Button(root, text="Test", command=test_regex, font=("Arial", 12))
test_button.pack(pady=10)

# ফলাফল দেখানোর জন্য লেবেল
result_label = tk.Label(root, text="", font=("Arial", 12), justify="left")
result_label.pack(pady=10)

root.mainloop()

কোড ব্যাখ্যা

  1. regex_entry: ব্যবহারকারীর ইনপুট হিসেবে রেগুলার এক্সপ্রেশন ইনপুট করার জন্য Entry উইজেট।
  2. text_entry: টেক্সট ইনপুট করার জন্য Text উইজেট, যেখানে প্যাটার্ন পরীক্ষা করা হবে।
  3. test_regex() ফাংশন: এই ফাংশনটি রেগুলার এক্সপ্রেশন এবং টেক্সট ইনপুট গ্রহণ করে এবং re.compile()findall() ব্যবহার করে ম্যাচ খুঁজে বের করে।
  4. Error Handling: ভুল রেগুলার এক্সপ্রেশন দিলে try-except ব্লকের মাধ্যমে এরর প্রদর্শন করা হয়।
  5. result_label: ম্যাচের ফলাফল প্রদর্শনের জন্য একটি লেবেল যেখানে ম্যাচগুলো আলাদা করে প্রদর্শন করা হয়।

উপসংহার

এই রেগুলার এক্সপ্রেশন টেস্টারটি একটি দরকারী টুল, যা ব্যবহারকারীদের বিভিন্ন প্যাটার্ন পরীক্ষা করতে সাহায্য করে। এই টুলে আরও উন্নতি করা সম্ভব যেমন:

  • মাল্টিপল ম্যাচিং অপশন: match, search এবং sub অপশন।
  • রেজাল্টে ম্যাচ হাইলাইট করা
  • রেগুলার এক্সপ্রেশন ইতিহাস: আগের রেগুলার এক্সপ্রেশন সংরক্ষণ।

এই প্রজেক্টটি Python-এ GUI প্রোগ্রামিং এবং রেগুলার এক্সপ্রেশন সম্পর্কে দক্ষতা বৃদ্ধি করতে সহায়ক।

Content added By

নিউজ অ্যাপ

304

একটি নিউজ অ্যাপ হলো এমন একটি অ্যাপ্লিকেশন যা ব্যবহারকারীদের রিয়েল-টাইম নিউজ এবং শিরোনাম দেখতে সহায়তা করে। Python, Tkinter এবং একটি নিউজ API ব্যবহার করে সহজেই একটি নিউজ অ্যাপ তৈরি করা যায়।


প্রয়োজনীয়তা

Python: Python দিয়ে অ্যাপ তৈরি করতে হবে।

Tkinter: GUI তৈরি করতে Tkinter ব্যবহার করা হবে।

requests লাইব্রেরি: API থেকে ডেটা সংগ্রহ করতে requests ব্যবহার করা হবে। এটি ইন্সটল করতে:

pip install requests

News API (নিউজ ডেটা প্রাপ্তি): নিউজ অ্যাপ তৈরি করতে আমরা News API ব্যবহার করতে পারি। এটির জন্য একটি API কী প্রয়োজন। News API-এর ওয়েবসাইটে অ্যাকাউন্ট তৈরি করে ফ্রি API কী পেতে পারেন।


প্রজেক্ট: নিউজ অ্যাপ

ফিচারস

  1. নিউজ হেডলাইন দেখানো: শিরোনাম প্রদর্শন।
  2. ক্যাটাগরি অনুযায়ী নিউজ ফিল্টার: বিভিন্ন ক্যাটাগরি যেমন business, entertainment, sports ইত্যাদি।
  3. GUI ইন্টারফেস: Tkinter দিয়ে তৈরি সহজ ইউজার ইন্টারফেস।

ধাপ ১: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import messagebox
import requests

ধাপ ২: API থেকে ডেটা ফেচ করার ফাংশন

API ব্যবহার করে নির্দিষ্ট ক্যাটাগরির নিউজ হেডলাইন ফেচ করার জন্য একটি ফাংশন তৈরি করতে হবে।

def get_news(category="general"):
    api_key = "YOUR_API_KEY"  # এখানে আপনার News API কী লিখুন
    url = f"https://newsapi.org/v2/top-headlines?country=us&category={category}&apiKey={api_key}"
    
    try:
        response = requests.get(url)
        news_data = response.json()

        if news_data["status"] == "ok":
            articles = news_data["articles"]
            headlines = [article["title"] for article in articles]
            return headlines
        else:
            return ["No news found."]
    except Exception as e:
        return [f"Error fetching news: {e}"]

ধাপ ৩: Tkinter GUI সেটআপ করা

Tkinter GUI তৈরি করে ক্যাটাগরি নির্বাচন এবং নিউজ হেডলাইন দেখানোর ব্যবস্থা করতে হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("News App")
root.geometry("600x400")

# হেডলাইন দেখানোর জন্য টেক্সট বক্স
headline_text = tk.Text(root, wrap="word", font=("Arial", 12), width=60, height=15)
headline_text.pack(pady=10)

ধাপ ৪: ক্যাটাগরি বাটন এবং হেডলাইন দেখানোর ফাংশন

নিউজ ক্যাটাগরি বেছে নিতে এবং API থেকে ফেচ করা হেডলাইনগুলো GUI-তে দেখানোর জন্য ফাংশন তৈরি করা হবে।

def show_headlines(category):
    headline_text.delete(1.0, tk.END)  # টেক্সট বক্স ক্লিয়ার করা
    headlines = get_news(category)

    for headline in headlines:
        headline_text.insert(tk.END, f"{headline}\n\n")

ধাপ ৫: ক্যাটাগরি বাটন যুক্ত করা

Tkinter GUI তে ক্যাটাগরি বাটন যুক্ত করুন যাতে ব্যবহারকারী নির্দিষ্ট ক্যাটাগরির নিউজ দেখতে পারেন।

category_frame = tk.Frame(root)
category_frame.pack(pady=5)

categories = ["general", "business", "entertainment", "sports", "technology"]

for category in categories:
    btn = tk.Button(category_frame, text=category.capitalize(), command=lambda c=category: show_headlines(c))
    btn.pack(side="left", padx=5)

ধাপ ৬: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import messagebox
import requests

def get_news(category="general"):
    api_key = "YOUR_API_KEY"  # এখানে আপনার News API কী লিখুন
    url = f"https://newsapi.org/v2/top-headlines?country=us&category={category}&apiKey={api_key}"
    
    try:
        response = requests.get(url)
        news_data = response.json()

        if news_data["status"] == "ok":
            articles = news_data["articles"]
            headlines = [article["title"] for article in articles]
            return headlines
        else:
            return ["No news found."]
    except Exception as e:
        return [f"Error fetching news: {e}"]

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("News App")
root.geometry("600x400")

# হেডলাইন দেখানোর জন্য টেক্সট বক্স
headline_text = tk.Text(root, wrap="word", font=("Arial", 12), width=60, height=15)
headline_text.pack(pady=10)

# হেডলাইন দেখানোর ফাংশন
def show_headlines(category):
    headline_text.delete(1.0, tk.END)  # টেক্সট বক্স ক্লিয়ার করা
    headlines = get_news(category)

    for headline in headlines:
        headline_text.insert(tk.END, f"{headline}\n\n")

# ক্যাটাগরি বাটন ফ্রেম
category_frame = tk.Frame(root)
category_frame.pack(pady=5)

# ক্যাটাগরি বাটন
categories = ["general", "business", "entertainment", "sports", "technology"]

for category in categories:
    btn = tk.Button(category_frame, text=category.capitalize(), command=lambda c=category: show_headlines(c))
    btn.pack(side="left", padx=5)

root.mainloop()

কোড ব্যাখ্যা

  1. get_news(category): এই ফাংশনটি News API থেকে নির্দিষ্ট ক্যাটাগরির শিরোনাম সংগ্রহ করে এবং সেগুলো headlines তালিকায় রিটার্ন করে।
  2. show_headlines(category): ক্যাটাগরি বেছে নেয়ার পর হেডলাইনগুলো headline_text উইজেটে প্রদর্শন করে।
  3. Tkinter GUI: Tkinter দিয়ে GUI তৈরি করা হয়েছে, যেখানে ক্যাটাগরি বাটন এবং হেডলাইন দেখানোর জন্য টেক্সট বক্স রয়েছে।

উপসংহার

এই নিউজ অ্যাপটি একটি সহজ টুল, যা ব্যবহারকারীদের রিয়েল-টাইমে নিউজ পেতে সহায়ক। এর মাধ্যমে Python Tkinter ও API ইন্টিগ্রেশন বোঝা যায়। চাইলে আরও কিছু ফিচার যোগ করা যেতে পারে, যেমন:

  • অল্টারনেট নিউজ সাইট থেকে ডেটা সংগ্রহ
  • সার্চ ফিচার: নির্দিষ্ট কীওয়ার্ড অনুসারে সার্চ করার সুবিধা।
  • বিভিন্ন ভাষার সাপোর্ট: বহুভাষী নিউজ সাপোর্ট।

এই প্রজেক্টটি Python-এ API এবং GUI প্রোগ্রামিং শিখতে সহায়ক হবে।

Content added By

পাইথন গেম (টিক-ট্যাক-টো বা স্নেক গেম)

411

Python দিয়ে একটি ক্লাসিক গেম তৈরি করা একটি মজাদার ও শিক্ষামূলক প্রোজেক্ট হতে পারে। এখানে দুটি জনপ্রিয় গেমের উদাহরণ দেয়া হলো: টিক-ট্যাক-টো এবং স্নেক গেম


গেম ১: টিক-ট্যাক-টো

টিক-ট্যাক-টো গেমটি Python এবং Tkinter ব্যবহার করে তৈরি করা একটি জনপ্রিয় গেম যেখানে দুটি প্লেয়ার "X" এবং "O" চিহ্ন দিয়ে গেম বোর্ড পূরণ করে। যিনি প্রথমে কোনো সারি, কলাম বা ডায়াগোনাল পূরণ করতে সক্ষম হন, তিনি বিজয়ী। এই গেমটি GUI দিয়ে খুব সহজে তৈরি করা যায়।


টিক-ট্যাক-টো গেম কোড

import tkinter as tk
from tkinter import messagebox

# Tkinter মেইন উইন্ডো তৈরি করা
root = tk.Tk()
root.title("Tic Tac Toe")

# বোর্ড তৈরি করা
board = [" " for _ in range(9)]
current_player = "X"  # শুরুতে প্লেয়ার X

# বোর্ড আপডেট ফাংশন
def update_board(button, index):
    global current_player
    if board[index] == " ":
        board[index] = current_player
        button.config(text=current_player)
        
        # বিজয়ী চেক করা
        if check_winner():
            messagebox.showinfo("Tic Tac Toe", f"Player {current_player} wins!")
            reset_board()
        elif " " not in board:
            messagebox.showinfo("Tic Tac Toe", "It's a tie!")
            reset_board()
        else:
            # প্লেয়ার পরিবর্তন করা
            current_player = "O" if current_player == "X" else "X"

# বিজয়ী চেক ফাংশন
def check_winner():
    win_conditions = [(0, 1, 2), (3, 4, 5), (6, 7, 8), 
                      (0, 3, 6), (1, 4, 7), (2, 5, 8), 
                      (0, 4, 8), (2, 4, 6)]
    for a, b, c in win_conditions:
        if board[a] == board[b] == board[c] != " ":
            return True
    return False

# বোর্ড রিসেট ফাংশন
def reset_board():
    global board, current_player
    board = [" " for _ in range(9)]
    current_player = "X"
    for button in buttons:
        button.config(text="")

# বোর্ডের জন্য Tkinter বাটন তৈরি করা
buttons = []
for i in range(9):
    button = tk.Button(root, text=" ", font=("Arial", 24), width=5, height=2, 
                       command=lambda i=i: update_board(buttons[i], i))
    button.grid(row=i // 3, column=i % 3)
    buttons.append(button)

# Tkinter উইন্ডো লুপ শুরু করা
root.mainloop()

কোড ব্যাখ্যা

Tkinter GUI সেটআপ: Tkinter ব্যবহার করে GUI তৈরি করা হয়েছে এবং উইন্ডো শিরোনাম Tic Tac Toe সেট করা হয়েছে।

বোর্ড তৈরি: board নামক একটি তালিকা তৈরি করা হয়েছে, যা গেম বোর্ডকে প্রতিনিধিত্ব করে। প্রতিটি অবস্থানকে " " (ফাঁকা) দিয়ে শুরু করা হয় এবং প্লেয়ারের চিহ্ন অনুযায়ী আপডেট করা হয়।

update_board() ফাংশন: যখন কোনো প্লেয়ার বোর্ডের একটি নির্দিষ্ট স্থান বেছে নেয়, তখন এই ফাংশনটি বোর্ডকে আপডেট করে, বর্তমান প্লেয়ারের চিহ্ন দেখায় এবং বিজয়ী বা টাই কিনা তা চেক করে।

check_winner() ফাংশন: প্রতিটি চালের পর এই ফাংশনটি বিজয়ী চেক করে। বিভিন্ন win_conditions তালিকা অনুযায়ী যদি কোনো প্লেয়ার তিনটি সংযুক্ত চিহ্ন পূরণ করে তবে সেই প্লেয়ারকে বিজয়ী ঘোষণা করা হয়।

reset_board() ফাংশন: গেম শেষ হওয়ার পর বোর্ড এবং প্লেয়ার রিসেট করে নতুন গেম শুরু করা হয়।

Tkinter বাটন তৈরি: বোর্ডের জন্য Tkinter বাটন তৈরি করা হয়েছে, যা ৩x৩ গ্রিডে সাজানো হয়েছে। প্রতিটি বাটন ক্লিক করলে update_board() ফাংশন কল হয় এবং বোর্ড আপডেট হয়।


গেম কন্ট্রোল

  • গেমটি চালু হলে প্লেয়ার "X" প্রথমে চাল শুরু করবে।
  • কোনো প্লেয়ার বোর্ডে তিনটি সংযুক্ত চিহ্ন পূরণ করলে বিজয়ী ঘোষণা করা হবে এবং বোর্ড রিসেট হবে।
  • যদি সব ঘর পূরণ হয় এবং বিজয়ী না পাওয়া যায়, তবে গেমটি টাই হবে এবং বোর্ড রিসেট হবে।

সারসংক্ষেপ

এই টিক-ট্যাক-টো গেম গেমটি Python এবং Tkinter ব্যবহার করে তৈরি করা একটি সহজ কিন্তু মজাদার প্রোজেক্ট। এটি ব্যবহারকারীদের Python প্রোগ্রামিং এবং GUI ডিজাইনের ধারণা স্পষ্ট করতে সহায়ক হবে। চাইলে আপনি এই গেমে AI বা আরও উন্নত ফিচার যেমন স্কোর ট্র্যাকিংও যোগ করতে পারেন।


গেম ২: স্নেক গেম

স্নেক গেম একটি ক্লাসিক গেম যেখানে স্নেকটি খাবারের সন্ধান করে এবং খাবার খেলেই তার দৈর্ঘ্য বাড়ে। স্নেকটি প্রাচীর বা নিজের শরীরের সাথে ধাক্কা খেলে গেম শেষ হয়। এই গেমটি Python-এর turtle লাইব্রেরি ব্যবহার করে সহজেই তৈরি করা যায়।


স্নেক গেম কোড

import turtle
import time
import random

# গেম সেটআপ
delay = 0.1
score = 0
high_score = 0

# উইন্ডো সেটআপ
window = turtle.Screen()
window.title("Snake Game")
window.bgcolor("black")
window.setup(width=600, height=600)
window.tracer(0)

# স্নেকের মাথা তৈরি
head = turtle.Turtle()
head.speed(0)
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "stop"

# খাবার তৈরি
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100)

segments = []

# স্কোরবোর্ড তৈরি
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Score: 0  High Score: 0", align="center", font=("Courier", 24, "normal"))

# গেম চলাচল ফাংশন
def move():
    if head.direction == "up":
        y = head.ycor()
        head.sety(y + 20)
    if head.direction == "down":
        y = head.ycor()
        head.sety(y - 20)
    if head.direction == "left":
        x = head.xcor()
        head.setx(x - 20)
    if head.direction == "right":
        x = head.xcor()
        head.setx(x + 20)

# স্নেকের চলাচলের দিক নির্দেশনা
def go_up():
    if head.direction != "down":
        head.direction = "up"

def go_down():
    if head.direction != "up":
        head.direction = "down"

def go_left():
    if head.direction != "right":
        head.direction = "left"

def go_right():
    if head.direction != "left":
        head.direction = "right"

# কিবোর্ড ইনপুট
window.listen()
window.onkey(go_up, "w")
window.onkey(go_down, "s")
window.onkey(go_left, "a")
window.onkey(go_right, "d")

# গেম লুপ
while True:
    window.update()

    # সীমানা চেক
    if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
        time.sleep(1)
        head.goto(0, 0)
        head.direction = "stop"

        # সেগমেন্ট পরিষ্কার করা
        for segment in segments:
            segment.goto(1000, 1000)
        segments.clear()

        # স্কোর রিসেট
        score = 0
        delay = 0.1
        pen.clear()
        pen.write(f"Score: {score}  High Score: {high_score}", align="center", font=("Courier", 24, "normal"))

    # খাবার খাওয়া
    if head.distance(food) < 20:
        # নতুন খাবার তৈরি করা
        x = random.randint(-290, 290)
        y = random.randint(-290, 290)
        food.goto(x, y)

        # স্নেকের লেজ বৃদ্ধি করা
        new_segment = turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)

        # স্কোর বাড়ানো
        score += 10
        if score > high_score:
            high_score = score

        delay -= 0.001
        pen.clear()
        pen.write(f"Score: {score}  High Score: {high_score}", align="center", font=("Courier", 24, "normal"))

    # সেগমেন্টের চলাচল
    for index in range(len(segments) - 1, 0, -1):
        x = segments[index - 1].xcor()
        y = segments[index - 1].ycor()
        segments[index].goto(x, y)

    if len(segments) > 0:
        x = head.xcor()
        y = head.ycor()
        segments[0].goto(x, y)

    move()

    # শরীরের সাথে সংঘর্ষ চেক করা
    for segment in segments:
        if segment.distance(head) < 20:
            time.sleep(1)
            head.goto(0, 0)
            head.direction = "stop"

            # সেগমেন্ট পরিষ্কার করা
            for segment in segments:
                segment.goto(1000, 1000)
            segments.clear()

            # স্কোর রিসেট
            score = 0
            delay = 0.1
            pen.clear()
            pen.write(f"Score: {score}  High Score: {high_score}", align="center", font=("Courier", 24, "normal"))

    time.sleep(delay)

window.mainloop()

কোড ব্যাখ্যা

Tkinter উইন্ডো সেটআপ: turtle.Screen() ব্যবহার করে একটি 600x600 সাইজের উইন্ডো তৈরি করা হয়েছে এবং ব্যাকগ্রাউন্ড কালো করা হয়েছে।

স্নেকের মাথা: turtle.Turtle() দিয়ে স্নেকের মাথা তৈরি করা হয়েছে এবং তা স্ক্রিনের কেন্দ্রে স্থাপন করা হয়েছে।

খাবার: র্যান্ডম লোকেশনে খাবার তৈরি করা হয়েছে, এবং যখন স্নেক মাথা খাবারের কাছে পৌঁছায়, তখন খাবারটি অন্য র্যান্ডম অবস্থানে চলে যায়।

কিবোর্ড ইনপুট: কিবোর্ড ইনপুট হিসাবে w, s, a, d ব্যবহার করা হয়েছে (উপর, নিচ, বাম, ডান)।

গেম লুপ: গেমের মূল লুপটি প্রতিনিয়ত স্নেকের অবস্থান আপডেট করে এবং স্ক্রিনে নতুন পরিস্থিতি প্রদর্শন করে।

শরীরের বৃদ্ধি এবং সংঘর্ষ: স্নেক যদি খাবার খায়, তবে তার শরীরের দৈর্ঘ্য বাড়ে, এবং যদি সে প্রাচীর বা নিজের শরীরের সাথে ধাক্কা খায়, তবে গেমটি রিসেট হয়।

স্কোরবোর্ড: স্কোর এবং হাই স্কোর ট্র্যাক করতে স্কোরবোর্ড তৈরি করা হয়েছে।


সারসংক্ষেপ

এই স্নেক গেমটি Python-এর turtle লাইব্রেরি ব্যবহার করে তৈরি করা সহজ একটি গেম। এই প্রোজেক্টটি গেম প্রোগ্রামিং, কিবোর্ড ইভেন্ট হ্যান্ডলিং এবং স্কোর ট্র্যাকিং শিখতে সহায়ক। আপনি চাইলে এই গেমে আরও ফিচার যোগ করতে পারেন, যেমন:

  • লেভেল আপ: স্কোর বাড়লে গেমের গতি বাড়ানো।
  • মাল্টিপ্লেয়ার মোড: একাধিক খেলোয়াড়ের জন্য সমর্থন।
  • প্রতিযোগিতা: টাইমার যোগ করে দ্রুততম স্কোর ট্র্যাকিং।

Python-এ স্নেক গেম তৈরি করা প্রোগ্রামিং এবং গেম ডেভেলপমেন্টের দক্ষতা বাড়াতে সহায়ক।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...